From 9c8bafb5f69e76615c1f8363fc3c63e6eeff7984 Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 12 Jan 2022 09:30:44 -0800 Subject: [PATCH 01/10] DEPR: df.iloc[:, foo] = bar attempt to set inplace --- pandas/core/frame.py | 2 +- pandas/core/groupby/groupby.py | 8 ++- pandas/core/indexing.py | 49 +++++++++++-- pandas/tests/extension/base/setitem.py | 26 +++++-- pandas/tests/frame/indexing/test_coercion.py | 10 ++- pandas/tests/frame/indexing/test_setitem.py | 4 +- pandas/tests/frame/methods/test_diff.py | 5 +- pandas/tests/frame/methods/test_dropna.py | 4 +- pandas/tests/frame/methods/test_quantile.py | 2 +- pandas/tests/frame/methods/test_rename.py | 5 +- pandas/tests/frame/methods/test_sort_index.py | 3 + pandas/tests/frame/test_reductions.py | 7 +- pandas/tests/indexing/multiindex/test_loc.py | 7 +- pandas/tests/indexing/test_iloc.py | 19 +++-- pandas/tests/indexing/test_indexing.py | 20 ++++-- pandas/tests/indexing/test_loc.py | 69 ++++++++++++++----- pandas/tests/indexing/test_partial.py | 4 +- pandas/tests/io/pytables/test_append.py | 8 +-- pandas/tests/io/sas/test_sas7bdat.py | 2 +- pandas/tests/io/test_stata.py | 4 +- 20 files changed, 196 insertions(+), 62 deletions(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 02676fb78e699..cebd55a2b1c8c 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -5318,7 +5318,7 @@ def _replace_columnwise( target, value = mapping[ax[i]] newobj = ser.replace(target, value, regex=regex) - res.iloc[:, i] = newobj + res._iset_item(i, newobj) if inplace: return diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index e4c5541468629..3b253bf22a329 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -2132,7 +2132,13 @@ def sem(self, ddof: int = 1): counts = self.count() result_ilocs = result.columns.get_indexer_for(cols) count_ilocs = counts.columns.get_indexer_for(cols) - result.iloc[:, result_ilocs] /= np.sqrt(counts.iloc[:, count_ilocs]) + with warnings.catch_warnings(): + # TODO(2.0): once iloc[:, foo] = bar depecation is enforced, + # this catching will be unnecessary + warnings.filterwarnings( + "ignore", ".*will attempt to set the values inplace.*" + ) + result.iloc[:, result_ilocs] /= np.sqrt(counts.iloc[:, count_ilocs]) return result @final diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 77482cbc88bf5..6a209a77aca2f 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -19,6 +19,7 @@ from pandas.util._decorators import doc from pandas.util._exceptions import find_stack_level +from pandas.core.dtypes.cast import can_hold_element from pandas.core.dtypes.common import ( is_array_like, is_bool_dtype, @@ -1858,6 +1859,7 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): pi = plane_indexer ser = self.obj._ixs(loc, axis=1) + orig_values = ser._values # perform the equivalent of a setitem on the info axis # as we have a null slice or a slice with full bounds @@ -1865,17 +1867,17 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): # multi-dim object # GH#6149 (null slice), GH#10408 (full bounds) if com.is_null_slice(pi) or com.is_full_slice(pi, len(self.obj)): - ser = value + pass elif ( is_array_like(value) and is_exact_shape_match(ser, value) and not is_empty_indexer(pi, value) ): if is_list_like(pi): - ser = value[np.argsort(pi)] + value = value[np.argsort(pi)] else: # in case of slice - ser = value[pi] + value = value[pi] else: # set the item, first attempting to operate inplace, then # falling back to casting if necessary; see @@ -1891,8 +1893,40 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): self.obj._iset_item(loc, ser) return - # reset the sliced object if unique - self.obj._iset_item(loc, ser) + # We will not operate in-place, but will attempt to in the future. + # To determine whether we need to issue a FutureWarning, see if the + # setting in-place would work, i.e. behavior will change. + warn = can_hold_element(ser._values, value) + # Don't issue the warning yet, as we can still trim a few cases where + # behavior will not change. + + self.obj._iset_item(loc, value) + + if warn: + new_values = self.obj._ixs(loc, axis=1)._values + + if ( + isinstance(new_values, np.ndarray) + and isinstance(orig_values, np.ndarray) + and np.shares_memory(new_values, orig_values) + ): + # TODO: get something like tm.shares_memory working? + # The values were set inplace after all, no need to warn, + # e.g. test_rename_nocopy + pass + else: + warnings.warn( + "In a future version, `df.iloc[:, i] = newvals` will attempt " + "to set the values inplace instead of always setting a new " + "array. To retain the old behavior, use either " + "`df[df.columns[i]] = newvals` or, if columns are non-unique, " + "`df.iloc(axis=1)[i] = newvals`.", + FutureWarning, + stacklevel=find_stack_level(), + ) + # TODO: how to get future behavior? + # TODO: what if we got here indirectly via loc? + return def _setitem_single_block(self, indexer, value, name: str): """ @@ -1902,7 +1936,6 @@ def _setitem_single_block(self, indexer, value, name: str): info_axis = self.obj._info_axis_number item_labels = self.obj._get_axis(info_axis) - if isinstance(indexer, tuple): # if we are setting on the info axis ONLY @@ -1917,7 +1950,9 @@ def _setitem_single_block(self, indexer, value, name: str): if len(item_labels.get_indexer_for([col])) == 1: # e.g. test_loc_setitem_empty_append_expands_rows loc = item_labels.get_loc(col) - self.obj._iset_item(loc, value) + # Go through _setitem_single_column to get + # FutureWarning if relevant. + self._setitem_single_column(loc, value, indexer[0]) return indexer = maybe_convert_ix(*indexer) # e.g. test_setitem_frame_align diff --git a/pandas/tests/extension/base/setitem.py b/pandas/tests/extension/base/setitem.py index 208a1a1757be2..e3b9e42444a52 100644 --- a/pandas/tests/extension/base/setitem.py +++ b/pandas/tests/extension/base/setitem.py @@ -371,10 +371,13 @@ def test_setitem_frame_2d_values(self, data, request): # Avoiding using_array_manager fixture # https://github.com/pandas-dev/pandas/pull/44514#discussion_r754002410 using_array_manager = isinstance(df._mgr, pd.core.internals.ArrayManager) + + # These dtypes have non-broken implementations of _can_hold_element + has_can_hold_element = isinstance( + data.dtype, (PandasDtype, PeriodDtype, IntervalDtype, DatetimeTZDtype) + ) if using_array_manager: - if not isinstance( - data.dtype, (PandasDtype, PeriodDtype, IntervalDtype, DatetimeTZDtype) - ): + if not has_can_hold_element: # These dtypes have non-broken implementations of _can_hold_element mark = pytest.mark.xfail(reason="Goes through split path, loses dtype") request.node.add_marker(mark) @@ -382,13 +385,26 @@ def test_setitem_frame_2d_values(self, data, request): df = pd.DataFrame({"A": data}) orig = df.copy() - df.iloc[:] = df + msg = "will attempt to set the values inplace instead" + warn = None + if has_can_hold_element and not isinstance(data.dtype, PandasDtype): + # PandasDtype excluded because it isn't *really* supported. + warn = FutureWarning + if using_array_manager: + warn = FutureWarning + + with tm.assert_produces_warning(warn, match=msg): + df.iloc[:] = df self.assert_frame_equal(df, orig) df.iloc[:-1] = df.iloc[:-1] self.assert_frame_equal(df, orig) - df.iloc[:] = df.values + if isinstance(data.dtype, DatetimeTZDtype) and not using_array_manager: + # no warning bc df.values casts to object dtype + warn = None + with tm.assert_produces_warning(warn, match=msg): + df.iloc[:] = df.values self.assert_frame_equal(df, orig) df.iloc[:-1] = df.values[:-1] diff --git a/pandas/tests/frame/indexing/test_coercion.py b/pandas/tests/frame/indexing/test_coercion.py index 8b2bc60953e3e..cf4af32fc887a 100644 --- a/pandas/tests/frame/indexing/test_coercion.py +++ b/pandas/tests/frame/indexing/test_coercion.py @@ -36,7 +36,10 @@ def test_loc_setitem_multiindex_columns(self, consolidate): A.loc[2:3, (1, slice(2, 3))] = np.ones((2, 2), dtype=np.float32) assert (A.dtypes == np.float32).all() - A.loc[0:5, (1, slice(2, 3))] = np.ones((6, 2), dtype=np.float32) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + A.loc[0:5, (1, slice(2, 3))] = np.ones((6, 2), dtype=np.float32) + assert (A.dtypes == np.float32).all() A.loc[:, (1, slice(2, 3))] = np.ones((6, 2), dtype=np.float32) @@ -129,7 +132,10 @@ def test_iloc_setitem_unnecesssary_float_upcasting(): orig = df.copy() values = df[0].values.reshape(2, 1) - df.iloc[:, 0:1] = values + + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0:1] = values tm.assert_frame_equal(df, orig) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index cd0a0a0467742..47083f70a7556 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -773,7 +773,9 @@ def test_setitem_string_column_numpy_dtype_raising(self): def test_setitem_empty_df_duplicate_columns(self): # GH#38521 df = DataFrame(columns=["a", "b", "b"], dtype="float64") - df.loc[:, "a"] = list(range(2)) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "a"] = list(range(2)) expected = DataFrame( [[0, np.nan, np.nan], [1, np.nan, np.nan]], columns=["a", "b", "b"] ) diff --git a/pandas/tests/frame/methods/test_diff.py b/pandas/tests/frame/methods/test_diff.py index f61529659e9d5..fc804836f9a9b 100644 --- a/pandas/tests/frame/methods/test_diff.py +++ b/pandas/tests/frame/methods/test_diff.py @@ -90,7 +90,10 @@ def test_diff_datetime_with_nat_zero_periods(self, tz): df = ser.to_frame() df[1] = ser.copy() - df.iloc[:, 0] = pd.NaT + + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0] = pd.NaT expected = df - df assert expected[0].isna().all() diff --git a/pandas/tests/frame/methods/test_dropna.py b/pandas/tests/frame/methods/test_dropna.py index d0b9eebb31b93..017cb78c1ea2d 100644 --- a/pandas/tests/frame/methods/test_dropna.py +++ b/pandas/tests/frame/methods/test_dropna.py @@ -223,7 +223,9 @@ def test_dropna_with_duplicate_columns(self): df.iloc[2, [0, 1, 2]] = np.nan df.iloc[0, 0] = np.nan df.iloc[1, 1] = np.nan - df.iloc[:, 3] = np.nan + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 3] = np.nan expected = df.dropna(subset=["A", "B", "C"], how="all") expected.columns = ["A", "A", "B", "C"] diff --git a/pandas/tests/frame/methods/test_quantile.py b/pandas/tests/frame/methods/test_quantile.py index 8ff1b211c0db1..a1dccb46f29f0 100644 --- a/pandas/tests/frame/methods/test_quantile.py +++ b/pandas/tests/frame/methods/test_quantile.py @@ -667,7 +667,7 @@ def test_quantile_ea_all_na( obj.iloc[:] = index._na_value # TODO(ArrayManager): this casting should be unnecessary after GH#39763 is fixed - obj[:] = obj.astype(index.dtype) + obj = obj.astype(index.dtype) assert np.all(obj.dtypes == index.dtype) # result should be invariant to shuffling diff --git a/pandas/tests/frame/methods/test_rename.py b/pandas/tests/frame/methods/test_rename.py index 33fb191027c27..b1594660caec6 100644 --- a/pandas/tests/frame/methods/test_rename.py +++ b/pandas/tests/frame/methods/test_rename.py @@ -176,7 +176,10 @@ def test_rename_nocopy(self, float_frame): assert np.shares_memory(renamed["foo"]._values, float_frame["C"]._values) - renamed.loc[:, "foo"] = 1.0 + with tm.assert_produces_warning(None): + # This loc setitem already happens inplace, so no warning + # that this will change in the future + renamed.loc[:, "foo"] = 1.0 assert (float_frame["C"] == 1.0).all() def test_rename_inplace(self, float_frame): diff --git a/pandas/tests/frame/methods/test_sort_index.py b/pandas/tests/frame/methods/test_sort_index.py index 99ff0f04afd60..5bc9bf8e076c4 100644 --- a/pandas/tests/frame/methods/test_sort_index.py +++ b/pandas/tests/frame/methods/test_sort_index.py @@ -46,6 +46,9 @@ def test_sort_index_and_reconstruction_doc_example(self): tm.assert_frame_equal(result, expected) + # FIXME: the FutureWarning is issued on a setitem-with-expansion + # which will *not* change behavior, so should not get a warning. + @pytest.mark.filterwarnings("ignore:.*will attempt to set.*:FutureWarning") def test_sort_index_non_existent_label_multiindex(self): # GH#12261 df = DataFrame(0, columns=[], index=MultiIndex.from_product([[], []])) diff --git a/pandas/tests/frame/test_reductions.py b/pandas/tests/frame/test_reductions.py index 245e54d665745..0b4c76467be7b 100644 --- a/pandas/tests/frame/test_reductions.py +++ b/pandas/tests/frame/test_reductions.py @@ -1709,8 +1709,11 @@ def test_mad_nullable_integer_all_na(any_signed_int_ea_dtype): df2 = df.astype(any_signed_int_ea_dtype) # case with all-NA row/column - df2.iloc[:, 1] = pd.NA # FIXME(GH#44199): this doesn't operate in-place - df2.iloc[:, 1] = pd.array([pd.NA] * len(df2), dtype=any_signed_int_ea_dtype) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df2.iloc[:, 1] = pd.NA # FIXME(GH#44199): this doesn't operate in-place + df2.iloc[:, 1] = pd.array([pd.NA] * len(df2), dtype=any_signed_int_ea_dtype) + result = df2.mad() expected = df.mad() expected[1] = pd.NA diff --git a/pandas/tests/indexing/multiindex/test_loc.py b/pandas/tests/indexing/multiindex/test_loc.py index 6e59311634c76..3a9b145eeecf6 100644 --- a/pandas/tests/indexing/multiindex/test_loc.py +++ b/pandas/tests/indexing/multiindex/test_loc.py @@ -526,8 +526,11 @@ def test_loc_setitem_single_column_slice(): columns=MultiIndex.from_tuples([("A", "1"), ("A", "2"), ("B", "1")]), ) expected = df.copy() - df.loc[:, "B"] = np.arange(4) - expected.iloc[:, 2] = np.arange(4) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "B"] = np.arange(4) + with tm.assert_produces_warning(FutureWarning, match=msg): + expected.iloc[:, 2] = np.arange(4) tm.assert_frame_equal(df, expected) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index a3b876089994b..f239b332614b1 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -78,9 +78,14 @@ def test_iloc_setitem_fullcol_categorical(self, indexer, key, using_array_manage df = frame.copy() orig_vals = df.values - indexer(df)[key, 0] = cat overwrite = isinstance(key, slice) and key == slice(None) + warn = None + if overwrite or using_array_manager: + warn = FutureWarning + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(warn, match=msg): + indexer(df)[key, 0] = cat if overwrite or using_array_manager: # TODO(ArrayManager) we always overwrite because ArrayManager takes @@ -103,7 +108,8 @@ def test_iloc_setitem_fullcol_categorical(self, indexer, key, using_array_manage frame = DataFrame({0: np.array([0, 1, 2], dtype=object), 1: range(3)}) df = frame.copy() orig_vals = df.values - indexer(df)[key, 0] = cat + with tm.assert_produces_warning(FutureWarning, match=msg): + indexer(df)[key, 0] = cat expected = DataFrame({0: cat, 1: range(3)}) tm.assert_frame_equal(df, expected) @@ -887,7 +893,9 @@ def test_iloc_setitem_categorical_updates_inplace(self): df = DataFrame({1: cat, 2: [1, 2, 3]}) # This should modify our original values in-place - df.iloc[:, 0] = cat[::-1] + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0] = cat[::-1] expected = Categorical(["C", "B", "A"]) tm.assert_categorical_equal(cat, expected) @@ -1278,7 +1286,10 @@ def test_iloc_setitem_dtypes_duplicate_columns( ): # GH#22035 df = DataFrame([[init_value, "str", "str2"]], columns=["a", "b", "b"]) - df.iloc[:, 0] = df.iloc[:, 0].astype(dtypes) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0] = df.iloc[:, 0].astype(dtypes) + expected_df = DataFrame( [[expected_value, "str", "str2"]], columns=["a", "b", "b"] ) diff --git a/pandas/tests/indexing/test_indexing.py b/pandas/tests/indexing/test_indexing.py index 36176bb8194d4..c669b7a272040 100644 --- a/pandas/tests/indexing/test_indexing.py +++ b/pandas/tests/indexing/test_indexing.py @@ -550,14 +550,17 @@ def test_astype_assignment(self): ) df = df_orig.copy() - df.iloc[:, 0:2] = df.iloc[:, 0:2].astype(np.int64) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0:2] = df.iloc[:, 0:2].astype(np.int64) expected = DataFrame( [[1, 2, "3", ".4", 5, 6.0, "foo"]], columns=list("ABCDEFG") ) tm.assert_frame_equal(df, expected) df = df_orig.copy() - df.iloc[:, 0:2] = df.iloc[:, 0:2]._convert(datetime=True, numeric=True) + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0:2] = df.iloc[:, 0:2]._convert(datetime=True, numeric=True) expected = DataFrame( [[1, 2, "3", ".4", 5, 6.0, "foo"]], columns=list("ABCDEFG") ) @@ -565,14 +568,16 @@ def test_astype_assignment(self): # GH5702 (loc) df = df_orig.copy() - df.loc[:, "A"] = df.loc[:, "A"].astype(np.int64) + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "A"] = df.loc[:, "A"].astype(np.int64) expected = DataFrame( [[1, "2", "3", ".4", 5, 6.0, "foo"]], columns=list("ABCDEFG") ) tm.assert_frame_equal(df, expected) df = df_orig.copy() - df.loc[:, ["B", "C"]] = df.loc[:, ["B", "C"]].astype(np.int64) + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, ["B", "C"]] = df.loc[:, ["B", "C"]].astype(np.int64) expected = DataFrame( [["1", 2, 3, ".4", 5, 6.0, "foo"]], columns=list("ABCDEFG") ) @@ -581,12 +586,15 @@ def test_astype_assignment(self): def test_astype_assignment_full_replacements(self): # full replacements / no nans df = DataFrame({"A": [1.0, 2.0, 3.0, 4.0]}) - df.iloc[:, 0] = df["A"].astype(np.int64) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.iloc[:, 0] = df["A"].astype(np.int64) expected = DataFrame({"A": [1, 2, 3, 4]}) tm.assert_frame_equal(df, expected) df = DataFrame({"A": [1.0, 2.0, 3.0, 4.0]}) - df.loc[:, "A"] = df["A"].astype(np.int64) + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "A"] = df["A"].astype(np.int64) expected = DataFrame({"A": [1, 2, 3, 4]}) tm.assert_frame_equal(df, expected) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index f551363063999..aaeece3815b6b 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -336,7 +336,9 @@ def test_loc_setitem_dtype(self): # GH31340 df = DataFrame({"id": ["A"], "a": [1.2], "b": [0.0], "c": [-2.5]}) cols = ["a", "b", "c"] - df.loc[:, cols] = df.loc[:, cols].astype("float32") + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, cols] = df.loc[:, cols].astype("float32") expected = DataFrame( { @@ -567,7 +569,9 @@ def test_loc_setitem_consistency_empty(self): expected = DataFrame(columns=["x", "y"]) expected["x"] = expected["x"].astype(np.int64) df = DataFrame(columns=["x", "y"]) - df.loc[:, "x"] = 1 + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "x"] = 1 tm.assert_frame_equal(df, expected) df = DataFrame(columns=["x", "y"]) @@ -598,20 +602,29 @@ def test_loc_setitem_consistency_slice_column_len(self): ] df = DataFrame(values, index=mi, columns=cols) - df.loc[:, ("Respondent", "StartDate")] = to_datetime( - df.loc[:, ("Respondent", "StartDate")] - ) - df.loc[:, ("Respondent", "EndDate")] = to_datetime( - df.loc[:, ("Respondent", "EndDate")] - ) - df.loc[:, ("Respondent", "Duration")] = ( - df.loc[:, ("Respondent", "EndDate")] - - df.loc[:, ("Respondent", "StartDate")] - ) + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, ("Respondent", "StartDate")] = to_datetime( + df.loc[:, ("Respondent", "StartDate")] + ) + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, ("Respondent", "EndDate")] = to_datetime( + df.loc[:, ("Respondent", "EndDate")] + ) + with tm.assert_produces_warning(None, match=msg): + # Adding a new key -> no warning + df.loc[:, ("Respondent", "Duration")] = ( + df.loc[:, ("Respondent", "EndDate")] + - df.loc[:, ("Respondent", "StartDate")] + ) + + with tm.assert_produces_warning(None, match=msg): + # timedelta64[s] -> float64, so this cannot be done inplace, so + # no warning + df.loc[:, ("Respondent", "Duration")] = df.loc[ + :, ("Respondent", "Duration") + ].astype("timedelta64[s]") - df.loc[:, ("Respondent", "Duration")] = df.loc[ - :, ("Respondent", "Duration") - ].astype("timedelta64[s]") expected = Series( [1380, 720, 840, 2160.0], index=df.index, name=("Respondent", "Duration") ) @@ -680,7 +693,9 @@ def test_loc_setitem_frame_with_reindex_mixed(self): # GH#40480 df = DataFrame(index=[3, 5, 4], columns=["A", "B"], dtype=float) df["B"] = "string" - df.loc[[4, 3, 5], "A"] = np.array([1, 2, 3], dtype="int64") + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[[4, 3, 5], "A"] = np.array([1, 2, 3], dtype="int64") ser = Series([2, 3, 1], index=[3, 5, 4], dtype="int64") expected = DataFrame({"A": ser}) expected["B"] = "string" @@ -690,7 +705,9 @@ def test_loc_setitem_frame_with_inverted_slice(self): # GH#40480 df = DataFrame(index=[1, 2, 3], columns=["A", "B"], dtype=float) df["B"] = "string" - df.loc[slice(3, 0, -1), "A"] = np.array([1, 2, 3], dtype="int64") + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[slice(3, 0, -1), "A"] = np.array([1, 2, 3], dtype="int64") expected = DataFrame({"A": [3, 2, 1], "B": "string"}, index=[1, 2, 3]) tm.assert_frame_equal(df, expected) @@ -866,7 +883,14 @@ def test_loc_setitem_with_scalar_index(self, indexer, value): def test_loc_setitem_missing_columns(self, index, box, expected): # GH 29334 df = DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"]) - df.loc[index] = box + + warn = None + if isinstance(index[0], slice) and index[0] == slice(None): + warn = FutureWarning + + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(warn, match=msg): + df.loc[index] = box tm.assert_frame_equal(df, expected) def test_loc_coercion(self): @@ -1114,6 +1138,8 @@ def test_loc_uint64_disallow_negative(self): # don't wrap around ser.loc[[-1]] + # FIXME: warning issued here is false-positive + @pytest.mark.filterwarnings("ignore:.*will attempt to set.*:FutureWarning") def test_loc_setitem_empty_append_expands_rows(self): # GH6173, various appends to an empty dataframe @@ -1125,6 +1151,8 @@ def test_loc_setitem_empty_append_expands_rows(self): df.loc[:, "x"] = data tm.assert_frame_equal(df, expected) + # FIXME: warning issued here is false-positive + @pytest.mark.filterwarnings("ignore:.*will attempt to set.*:FutureWarning") def test_loc_setitem_empty_append_expands_rows_mixed_dtype(self): # GH#37932 same as test_loc_setitem_empty_append_expands_rows # but with mixed dtype so we go through take_split_path @@ -1366,7 +1394,10 @@ def test_loc_setitem_single_row_categorical(self): # GH#25495 df = DataFrame({"Alpha": ["a"], "Numeric": [0]}) categories = Categorical(df["Alpha"], categories=["a", "b", "c"]) - df.loc[:, "Alpha"] = categories + + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "Alpha"] = categories result = df["Alpha"] expected = Series(categories, index=df.index, name="Alpha") diff --git a/pandas/tests/indexing/test_partial.py b/pandas/tests/indexing/test_partial.py index 8251f09b97062..3c57970d46bc9 100644 --- a/pandas/tests/indexing/test_partial.py +++ b/pandas/tests/indexing/test_partial.py @@ -309,7 +309,9 @@ def test_partial_setting_frame(self): expected = DataFrame(dict({"A": [0, 2, 4], "B": Series([0, 2, 4])})) df = df_orig.copy() df["B"] = df["B"].astype(np.float64) - df.loc[:, "B"] = df.loc[:, "A"] + msg = "will attempt to set the values inplace instead" + with tm.assert_produces_warning(FutureWarning, match=msg): + df.loc[:, "B"] = df.loc[:, "A"] tm.assert_frame_equal(df, expected) # single dtype frame, partial setting diff --git a/pandas/tests/io/pytables/test_append.py b/pandas/tests/io/pytables/test_append.py index 5544b8112627b..2c4c0945affcb 100644 --- a/pandas/tests/io/pytables/test_append.py +++ b/pandas/tests/io/pytables/test_append.py @@ -168,7 +168,7 @@ def test_append_some_nans(setup_path): # first column df1 = df.copy() - df1.loc[:, "A1"] = np.nan + df1["A1"] = np.nan _maybe_remove(store, "df1") store.append("df1", df1[:10]) store.append("df1", df1[10:]) @@ -176,7 +176,7 @@ def test_append_some_nans(setup_path): # 2nd column df2 = df.copy() - df2.loc[:, "A2"] = np.nan + df2["A2"] = np.nan _maybe_remove(store, "df2") store.append("df2", df2[:10]) store.append("df2", df2[10:]) @@ -184,7 +184,7 @@ def test_append_some_nans(setup_path): # datetimes df3 = df.copy() - df3.loc[:, "E"] = np.nan + df3["E"] = np.nan _maybe_remove(store, "df3") store.append("df3", df3[:10]) store.append("df3", df3[10:]) @@ -622,7 +622,7 @@ def check_col(key, name, size): df_dc["string"] = "foo" df_dc.loc[df_dc.index[4:6], "string"] = np.nan df_dc.loc[df_dc.index[7:9], "string"] = "bar" - df_dc.loc[:, ["B", "C"]] = df_dc.loc[:, ["B", "C"]].abs() + df_dc[["B", "C"]] = df_dc[["B", "C"]].abs() df_dc["string2"] = "cool" # on-disk operations diff --git a/pandas/tests/io/sas/test_sas7bdat.py b/pandas/tests/io/sas/test_sas7bdat.py index 5477559262cb8..39785fd45a888 100644 --- a/pandas/tests/io/sas/test_sas7bdat.py +++ b/pandas/tests/io/sas/test_sas7bdat.py @@ -179,7 +179,7 @@ def test_date_time(datapath): fname, parse_dates=["Date1", "Date2", "DateTime", "DateTimeHi", "Taiw"] ) # GH 19732: Timestamps imported from sas will incur floating point errors - df.iloc[:, 3] = df.iloc[:, 3].dt.round("us") + df[df.columns[3]] = df.iloc[:, 3].dt.round("us") tm.assert_frame_equal(df, df0) diff --git a/pandas/tests/io/test_stata.py b/pandas/tests/io/test_stata.py index f0fd391c2a9c4..7c23c38430e83 100644 --- a/pandas/tests/io/test_stata.py +++ b/pandas/tests/io/test_stata.py @@ -1733,7 +1733,7 @@ def test_mixed_string_strl(self): tm.assert_frame_equal(reread, expected) # Check strl supports all None (null) - output.loc[:, "mixed"] = None + output["mixed"] = None output.to_stata( path, write_index=False, convert_strl=["mixed"], version=117 ) @@ -1745,7 +1745,7 @@ def test_mixed_string_strl(self): def test_all_none_exception(self, version): output = [{"none": "none", "number": 0}, {"none": None, "number": 1}] output = DataFrame(output) - output.loc[:, "none"] = None + output["none"] = None with tm.ensure_clean() as path: with pytest.raises(ValueError, match="Column `none` cannot be exported"): output.to_stata(path, version=version) From ee4c0d2afdbc50d2d3d27d757eee6bd1ef84ac70 Mon Sep 17 00:00:00 2001 From: Brock Date: Sun, 16 Jan 2022 18:25:25 -0800 Subject: [PATCH 02/10] doc fixup --- doc/source/user_guide/10min.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/user_guide/10min.rst b/doc/source/user_guide/10min.rst index 08488a33936f0..c536f6f718517 100644 --- a/doc/source/user_guide/10min.rst +++ b/doc/source/user_guide/10min.rst @@ -327,6 +327,7 @@ Setting values by position: Setting by assigning with a NumPy array: .. ipython:: python + :okwarning: df.loc[:, "D"] = np.array([5] * len(df)) From ab87ef0b1abd9db6c6240d179367bbf223746184 Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 19 Jan 2022 11:20:09 -0800 Subject: [PATCH 03/10] ArrayManager warnings --- pandas/tests/frame/indexing/test_indexing.py | 14 ++++++++++---- pandas/tests/frame/indexing/test_setitem.py | 6 +++++- pandas/tests/frame/indexing/test_where.py | 15 +++++++++++---- pandas/tests/frame/methods/test_quantile.py | 8 +++++++- pandas/tests/frame/methods/test_shift.py | 10 ++++++++-- pandas/tests/frame/test_nonunique_indexes.py | 11 ++++++++--- pandas/tests/frame/test_stack_unstack.py | 8 ++++++-- 7 files changed, 55 insertions(+), 17 deletions(-) diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index d84a2a3d18e81..061be4db40262 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -691,7 +691,7 @@ def test_getitem_setitem_boolean_multi(self): expected.loc[[0, 2], [1]] = 5 tm.assert_frame_equal(df, expected) - def test_getitem_setitem_float_labels(self): + def test_getitem_setitem_float_labels(self, using_array_manager): index = Index([1.5, 2, 3, 4, 5]) df = DataFrame(np.random.randn(5, 5), index=index) @@ -774,7 +774,10 @@ def test_getitem_setitem_float_labels(self): assert len(result) == 5 cp = df.copy() - cp.loc[1.0:5.0] = 0 + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + with tm.assert_produces_warning(warn, match=msg): + cp.loc[1.0:5.0] = 0 result = cp.loc[1.0:5.0] assert (result == 0).values.all() @@ -1085,7 +1088,7 @@ def test_loc_duplicates(self): df.loc[trange[bool_idx], "A"] += 6 tm.assert_frame_equal(df, expected) - def test_setitem_with_unaligned_tz_aware_datetime_column(self): + def test_setitem_with_unaligned_tz_aware_datetime_column(self, using_array_manager): # GH 12981 # Assignment of unaligned offset-aware datetime series. # Make sure timezone isn't lost @@ -1094,8 +1097,11 @@ def test_setitem_with_unaligned_tz_aware_datetime_column(self): df["dates"] = column[[1, 0, 2]] tm.assert_series_equal(df["dates"], column) + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" df = DataFrame({"dates": column}) - df.loc[[0, 1, 2], "dates"] = column[[1, 0, 2]] + with tm.assert_produces_warning(warn, match=msg): + df.loc[[0, 1, 2], "dates"] = column[[1, 0, 2]] tm.assert_series_equal(df["dates"], column) def test_loc_setitem_datetimelike_with_inference(self): diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 85e794bcafe43..6c438a123c209 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -399,10 +399,14 @@ def test_setitem_frame_length_0_str_key(self, indexer): def test_setitem_frame_duplicate_columns(self, using_array_manager, request): # GH#15695 + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + cols = ["A", "B", "C"] * 2 df = DataFrame(index=range(3), columns=cols) df.loc[0, "A"] = (0, 3) - df.loc[:, "B"] = (1, 4) + with tm.assert_produces_warning(warn, match=msg): + df.loc[:, "B"] = (1, 4) df["C"] = (2, 5) expected = DataFrame( [ diff --git a/pandas/tests/frame/indexing/test_where.py b/pandas/tests/frame/indexing/test_where.py index 794153040273e..849ca88643943 100644 --- a/pandas/tests/frame/indexing/test_where.py +++ b/pandas/tests/frame/indexing/test_where.py @@ -371,7 +371,7 @@ def test_where_bug_transposition(self): result = a.where(do_not_replace, b) tm.assert_frame_equal(result, expected) - def test_where_datetime(self): + def test_where_datetime(self, using_array_manager): # GH 3311 df = DataFrame( @@ -391,7 +391,11 @@ def test_where_datetime(self): expected = df.copy() expected.loc[[0, 1], "A"] = np.nan - expected.loc[:, "C"] = np.nan + + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + with tm.assert_produces_warning(warn, match=msg): + expected.loc[:, "C"] = np.nan tm.assert_frame_equal(result, expected) def test_where_none(self): @@ -520,7 +524,7 @@ def test_where_axis(self, using_array_manager): assert return_value is None tm.assert_frame_equal(result, expected) - def test_where_axis_multiple_dtypes(self): + def test_where_axis_multiple_dtypes(self, using_array_manager): # Multiple dtypes (=> multiple Blocks) df = pd.concat( [ @@ -576,7 +580,10 @@ def test_where_axis_multiple_dtypes(self): d2 = df.copy().drop(1, axis=1) expected = df.copy() - expected.loc[:, 1] = np.nan + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + with tm.assert_produces_warning(warn, match=msg): + expected.loc[:, 1] = np.nan result = df.where(mask, d2) tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/frame/methods/test_quantile.py b/pandas/tests/frame/methods/test_quantile.py index ceea2f885bdc6..34d1df447124c 100644 --- a/pandas/tests/frame/methods/test_quantile.py +++ b/pandas/tests/frame/methods/test_quantile.py @@ -686,7 +686,13 @@ def test_quantile_ea_all_na( ) request.node.add_marker(mark) - obj.iloc[:] = index._na_value + warn = None + if using_array_manager and frame_or_series is DataFrame: + warn = FutureWarning + + msg = "will attempt to set the values inplace" + with tm.assert_produces_warning(warn, match=msg): + obj.iloc[:] = index._na_value # TODO(ArrayManager): this casting should be unnecessary after GH#39763 is fixed obj = obj.astype(index.dtype) diff --git a/pandas/tests/frame/methods/test_shift.py b/pandas/tests/frame/methods/test_shift.py index 2463e81d78edd..f5e0d0727764e 100644 --- a/pandas/tests/frame/methods/test_shift.py +++ b/pandas/tests/frame/methods/test_shift.py @@ -350,17 +350,23 @@ def test_shift_empty(self): tm.assert_frame_equal(df, rs) - def test_shift_duplicate_columns(self): + def test_shift_duplicate_columns(self, using_array_manager): # GH#9092; verify that position-based shifting works # in the presence of duplicate columns column_lists = [list(range(5)), [1] * 5, [1, 1, 2, 2, 1]] data = np.random.randn(20, 5) + warn = None + if using_array_manager: + warn = FutureWarning + shifted = [] for columns in column_lists: df = DataFrame(data.copy(), columns=columns) for s in range(5): - df.iloc[:, s] = df.iloc[:, s].shift(s + 1) + msg = "will attempt to set the values inplace" + with tm.assert_produces_warning(warn, match=msg): + df.iloc[:, s] = df.iloc[:, s].shift(s + 1) df.columns = range(5) shifted.append(df) diff --git a/pandas/tests/frame/test_nonunique_indexes.py b/pandas/tests/frame/test_nonunique_indexes.py index d010426bee53e..bd8446c5d6552 100644 --- a/pandas/tests/frame/test_nonunique_indexes.py +++ b/pandas/tests/frame/test_nonunique_indexes.py @@ -318,18 +318,23 @@ def test_dup_columns_across_dtype(self): xp.columns = ["A", "A", "B"] tm.assert_frame_equal(rs, xp) - def test_set_value_by_index(self): + def test_set_value_by_index(self, using_array_manager): # See gh-12344 + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + df = DataFrame(np.arange(9).reshape(3, 3).T) df.columns = list("AAA") expected = df.iloc[:, 2] - df.iloc[:, 0] = 3 + with tm.assert_produces_warning(warn, match=msg): + df.iloc[:, 0] = 3 tm.assert_series_equal(df.iloc[:, 2], expected) df = DataFrame(np.arange(9).reshape(3, 3).T) df.columns = [2, float(2), str(2)] expected = df.iloc[:, 1] - df.iloc[:, 0] = 3 + with tm.assert_produces_warning(warn, match=msg): + df.iloc[:, 0] = 3 tm.assert_series_equal(df.iloc[:, 1], expected) diff --git a/pandas/tests/frame/test_stack_unstack.py b/pandas/tests/frame/test_stack_unstack.py index 005d2600b2bae..87915be22647a 100644 --- a/pandas/tests/frame/test_stack_unstack.py +++ b/pandas/tests/frame/test_stack_unstack.py @@ -22,9 +22,13 @@ class TestDataFrameReshape: - def test_stack_unstack(self, float_frame): + def test_stack_unstack(self, float_frame, using_array_manager): + warn = FutureWarning if using_array_manager else None + msg = "will attempt to set the values inplace" + df = float_frame.copy() - df[:] = np.arange(np.prod(df.shape)).reshape(df.shape) + with tm.assert_produces_warning(warn, match=msg): + df[:] = np.arange(np.prod(df.shape)).reshape(df.shape) stacked = df.stack() stacked_df = DataFrame({"foo": stacked, "bar": stacked}) From 5ef3d380fcc15425d847f073874f7f0c713b0b29 Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 31 Jan 2022 21:01:00 -0800 Subject: [PATCH 04/10] merge main --- .github/PULL_REQUEST_TEMPLATE.md | 8 +- asv_bench/benchmarks/groupby.py | 9 + ci/deps/actions-38-downstream_compat.yaml | 34 +- ci/deps/actions-38.yaml | 2 +- ci/deps/actions-39.yaml | 2 +- doc/source/development/code_style.rst | 49 - .../development/contributing_codebase.rst | 275 +- .../contributing_documentation.rst | 10 - doc/source/whatsnew/v1.4.1.rst | 5 +- doc/source/whatsnew/v1.5.0.rst | 12 +- pandas/_libs/index.pyx | 13 +- pandas/_libs/index_class_helper.pxi.in | 5 + pandas/_libs/lib.pyi | 4 - pandas/_libs/lib.pyx | 20 - pandas/_libs/src/headers/cmath | 48 - pandas/_libs/window/aggregations.pyx | 64 +- pandas/_testing/_io.py | 39 +- pandas/conftest.py | 8 + pandas/core/arrays/datetimelike.py | 7 +- pandas/core/arrays/datetimes.py | 8 +- pandas/core/arrays/interval.py | 3 +- pandas/core/arrays/sparse/array.py | 3 +- pandas/core/dtypes/astype.py | 14 +- pandas/core/dtypes/cast.py | 62 +- pandas/core/dtypes/common.py | 2 +- pandas/core/frame.py | 109 +- pandas/core/generic.py | 4 +- pandas/core/groupby/generic.py | 11 +- pandas/core/groupby/groupby.py | 2 +- pandas/core/indexes/base.py | 12 +- pandas/core/indexes/numeric.py | 17 - pandas/core/indexing.py | 85 +- pandas/core/internals/array_manager.py | 6 + pandas/core/internals/blocks.py | 186 +- pandas/core/internals/managers.py | 63 +- pandas/core/series.py | 23 +- pandas/core/sorting.py | 8 +- pandas/io/excel/_base.py | 7 +- pandas/io/excel/_odswriter.py | 13 +- pandas/io/excel/_openpyxl.py | 10 +- pandas/io/excel/_xlsxwriter.py | 11 +- pandas/io/excel/_xlwt.py | 6 + pandas/io/parsers/readers.py | 14 +- pandas/io/sql.py | 9 +- pandas/tests/apply/test_series_apply.py | 10 +- pandas/tests/apply/test_str.py | 13 +- pandas/tests/arrays/categorical/common.py | 2 +- .../tests/arrays/categorical/test_indexing.py | 2 +- pandas/tests/arrays/masked/test_arithmetic.py | 2 +- pandas/tests/arrays/sparse/test_accessor.py | 83 +- .../tests/arrays/sparse/test_arithmetics.py | 284 +- pandas/tests/arrays/sparse/test_array.py | 1102 +------ pandas/tests/arrays/sparse/test_astype.py | 129 + .../tests/arrays/sparse/test_constructors.py | 307 ++ pandas/tests/arrays/sparse/test_indexing.py | 292 ++ pandas/tests/arrays/sparse/test_reductions.py | 270 ++ pandas/tests/arrays/sparse/test_unary.py | 72 + pandas/tests/arrays/string_/test_string.py | 2 +- pandas/tests/base/test_misc.py | 8 +- pandas/tests/computation/test_eval.py | 47 +- pandas/tests/config/test_config.py | 4 +- pandas/tests/dtypes/cast/test_promote.py | 14 +- pandas/tests/dtypes/test_common.py | 2 + pandas/tests/dtypes/test_dtypes.py | 2 +- pandas/tests/extension/base/setitem.py | 2 +- pandas/tests/extension/test_sparse.py | 12 +- pandas/tests/frame/indexing/test_setitem.py | 4 +- pandas/tests/frame/indexing/test_where.py | 29 +- pandas/tests/frame/methods/test_clip.py | 6 +- pandas/tests/frame/methods/test_fillna.py | 19 + .../tests/frame/methods/test_interpolate.py | 2 +- pandas/tests/frame/methods/test_quantile.py | 8 +- .../tests/frame/methods/test_reset_index.py | 65 +- pandas/tests/frame/methods/test_shift.py | 9 +- .../tests/frame/methods/test_sort_values.py | 10 + pandas/tests/frame/methods/test_tz_convert.py | 6 +- pandas/tests/frame/test_query_eval.py | 6 +- pandas/tests/frame/test_reductions.py | 12 +- pandas/tests/frame/test_repr_info.py | 2 +- pandas/tests/frame/test_ufunc.py | 2 +- pandas/tests/generic/test_duplicate_labels.py | 5 +- pandas/tests/generic/test_finalize.py | 28 +- pandas/tests/groupby/test_apply.py | 2 +- pandas/tests/groupby/test_categorical.py | 2 +- pandas/tests/groupby/test_groupby.py | 11 +- pandas/tests/groupby/test_groupby_subclass.py | 2 +- pandas/tests/groupby/test_size.py | 2 +- .../tests/groupby/transform/test_transform.py | 54 +- .../indexes/categorical/test_category.py | 2 +- pandas/tests/indexes/datetimes/test_setops.py | 4 +- pandas/tests/indexes/multi/test_setops.py | 2 +- pandas/tests/indexes/object/test_astype.py | 16 +- pandas/tests/indexes/test_base.py | 6 +- pandas/tests/indexes/test_numpy_compat.py | 2 +- pandas/tests/indexes/test_setops.py | 2 +- pandas/tests/indexing/common.py | 2 +- .../tests/indexing/multiindex/test_sorted.py | 2 +- pandas/tests/indexing/test_categorical.py | 2 +- pandas/tests/indexing/test_coercion.py | 2 +- pandas/tests/indexing/test_iat.py | 17 + pandas/tests/indexing/test_indexing.py | 29 + pandas/tests/indexing/test_loc.py | 43 +- pandas/tests/internals/test_internals.py | 41 +- pandas/tests/io/conftest.py | 2 +- pandas/tests/io/excel/conftest.py | 4 +- pandas/tests/io/excel/test_odswriter.py | 10 + pandas/tests/io/excel/test_openpyxl.py | 13 +- pandas/tests/io/excel/test_readers.py | 15 +- pandas/tests/io/excel/test_writers.py | 16 +- pandas/tests/io/excel/test_xlsxwriter.py | 9 + pandas/tests/io/excel/test_xlwt.py | 9 + pandas/tests/io/formats/style/test_html.py | 2 +- pandas/tests/io/formats/style/test_style.py | 12 +- pandas/tests/io/formats/test_format.py | 2 +- pandas/tests/io/formats/test_to_markdown.py | 2 +- pandas/tests/io/json/data/teams.csv | 2716 +++++++++++++++++ .../json/test_json_table_schema_ext_dtype.py | 4 +- pandas/tests/io/json/test_pandas.py | 63 +- pandas/tests/io/json/test_ujson.py | 6 +- .../io/parser/common/test_file_buffer_url.py | 1 + pandas/tests/io/parser/conftest.py | 4 +- .../io/parser/dtypes/test_dtypes_basic.py | 1 + pandas/tests/io/parser/test_encoding.py | 4 +- pandas/tests/io/parser/test_network.py | 15 +- pandas/tests/io/parser/test_parse_dates.py | 12 +- pandas/tests/io/parser/test_textreader.py | 25 +- pandas/tests/io/pytables/test_read.py | 10 +- pandas/tests/io/pytables/test_store.py | 12 +- pandas/tests/io/pytables/test_timezones.py | 4 +- pandas/tests/io/sas/test_xport.py | 95 +- pandas/tests/io/test_feather.py | 1 + pandas/tests/io/test_html.py | 214 +- pandas/tests/io/test_parquet.py | 18 +- pandas/tests/io/test_s3.py | 6 +- pandas/tests/io/test_sql.py | 26 +- pandas/tests/io/xml/test_to_xml.py | 34 +- pandas/tests/io/xml/test_xml.py | 17 +- pandas/tests/plotting/frame/test_frame.py | 2 +- pandas/tests/plotting/test_converter.py | 4 +- pandas/tests/resample/test_base.py | 10 +- pandas/tests/resample/test_time_grouper.py | 2 +- pandas/tests/reshape/merge/test_join.py | 2 +- pandas/tests/reshape/merge/test_merge.py | 2 +- pandas/tests/reshape/merge/test_merge_asof.py | 182 +- .../tests/reshape/merge/test_merge_ordered.py | 2 +- pandas/tests/reshape/merge/test_multi.py | 2 +- pandas/tests/reshape/test_crosstab.py | 2 +- pandas/tests/reshape/test_melt.py | 2 +- pandas/tests/reshape/test_pivot.py | 4 +- pandas/tests/scalar/test_nat.py | 6 +- .../scalar/timestamp/test_comparisons.py | 2 +- pandas/tests/series/indexing/test_indexing.py | 2 +- pandas/tests/series/indexing/test_setitem.py | 2 +- pandas/tests/series/indexing/test_where.py | 2 +- pandas/tests/series/methods/test_compare.py | 25 + .../tests/series/methods/test_interpolate.py | 28 +- .../tests/series/methods/test_reset_index.py | 20 + pandas/tests/series/test_arithmetic.py | 4 +- pandas/tests/series/test_ufunc.py | 4 +- pandas/tests/strings/test_strings.py | 4 +- pandas/tests/test_downstream.py | 9 +- pandas/tests/test_expressions.py | 4 +- pandas/tests/test_nanops.py | 10 +- pandas/tests/tools/test_to_datetime.py | 27 + pandas/tests/tools/test_to_numeric.py | 16 +- .../tseries/offsets/test_business_day.py | 2 +- .../tseries/offsets/test_business_hour.py | 2 +- .../offsets/test_custom_business_hour.py | 2 +- .../offsets/test_custom_business_month.py | 2 +- pandas/tests/tseries/offsets/test_offsets.py | 4 +- pandas/tests/window/test_numba.py | 15 + pandas/tests/window/test_online.py | 15 + pandas/util/_test_decorators.py | 3 +- 173 files changed, 5651 insertions(+), 2580 deletions(-) delete mode 100644 pandas/_libs/src/headers/cmath create mode 100644 pandas/tests/arrays/sparse/test_astype.py create mode 100644 pandas/tests/arrays/sparse/test_constructors.py create mode 100644 pandas/tests/arrays/sparse/test_indexing.py create mode 100644 pandas/tests/arrays/sparse/test_reductions.py create mode 100644 pandas/tests/arrays/sparse/test_unary.py create mode 100644 pandas/tests/io/json/data/teams.csv diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 42017db8a05b1..a75a613ab2bf1 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ -- [ ] closes #xxxx -- [ ] tests added / passed -- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them -- [ ] whatsnew entry +- [ ] closes #xxxx (Replace xxxx with the Github issue number) +- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature +- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit). +- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature. diff --git a/asv_bench/benchmarks/groupby.py b/asv_bench/benchmarks/groupby.py index 342a3403f0cfa..6054fd8227937 100644 --- a/asv_bench/benchmarks/groupby.py +++ b/asv_bench/benchmarks/groupby.py @@ -741,6 +741,12 @@ def setup(self): index=np.random.choice(range(10), n), ) + n = 1_000_000 + self.df_tall = DataFrame( + np.random.randn(n, 3), + index=np.random.randint(0, 5, n), + ) + n = 20000 self.df1 = DataFrame( np.random.randint(1, n, (n, 3)), columns=["jim", "joe", "jolie"] @@ -760,6 +766,9 @@ def time_transform_lambda_max(self): def time_transform_ufunc_max(self): self.df.groupby(level="lev1").transform(np.max) + def time_transform_lambda_max_tall(self): + self.df_tall.groupby(level=0).transform(lambda x: np.max(x, axis=0)) + def time_transform_lambda_max_wide(self): self.df_wide.groupby(level=0).transform(lambda x: np.max(x, axis=0)) diff --git a/ci/deps/actions-38-downstream_compat.yaml b/ci/deps/actions-38-downstream_compat.yaml index af4f7dee851d5..f3fa95d03c98e 100644 --- a/ci/deps/actions-38-downstream_compat.yaml +++ b/ci/deps/actions-38-downstream_compat.yaml @@ -4,52 +4,57 @@ channels: - conda-forge dependencies: - python=3.8 - - pip # test dependencies - - cython>=0.29.24 + - cython=0.29.24 - pytest>=6.0 + - pytest-cov - pytest-xdist>=1.31 - hypothesis>=5.5.3 - - pytest-cov>=2.10.1 # this is only needed in the coverage build, ref: GH 35737 - - nomkl + - psutil # required dependencies - - numpy - python-dateutil + - numpy - pytz # optional dependencies - beautifulsoup4 - blosc - - fastparquet>=0.4.0 - - fsspec>=0.7.4 - - gcsfs + - bottleneck + - fastparquet + - fsspec - html5lib + - gcsfs - jinja2 - lxml - matplotlib + - numba - numexpr - - odfpy - openpyxl + - odfpy - pandas-gbq - psycopg2 - - pyarrow>=1.0.1 - pymysql - pytables + - pyarrow + - pyreadstat - pyxlsb - - s3fs>=0.4.0 + - s3fs - scipy - sqlalchemy + - tabulate - xarray - xlrd - xlsxwriter - xlwt + - zstandard # downstream packages - - aiobotocore<2.0.0 # GH#44311 pinned to fix docbuild + - aiobotocore - boto3 - - botocore>=1.11 + - botocore + - cftime - dask - ipython - geopandas @@ -62,5 +67,4 @@ dependencies: - pandas-datareader - pyyaml - py - - pip: - - torch + - pytorch diff --git a/ci/deps/actions-38.yaml b/ci/deps/actions-38.yaml index b23f686d845e9..60db02def8a3d 100644 --- a/ci/deps/actions-38.yaml +++ b/ci/deps/actions-38.yaml @@ -36,7 +36,7 @@ dependencies: - psycopg2 - pymysql - pytables - - pyarrow=3 + - pyarrow - pyreadstat - pyxlsb - s3fs diff --git a/ci/deps/actions-39.yaml b/ci/deps/actions-39.yaml index 631ef40b02e33..2d6430afd0b36 100644 --- a/ci/deps/actions-39.yaml +++ b/ci/deps/actions-39.yaml @@ -36,7 +36,7 @@ dependencies: - psycopg2 - pymysql - pytables - - pyarrow=5 + - pyarrow - pyreadstat - pyxlsb - s3fs diff --git a/doc/source/development/code_style.rst b/doc/source/development/code_style.rst index 7bbfc010fbfb2..b15898c623aec 100644 --- a/doc/source/development/code_style.rst +++ b/doc/source/development/code_style.rst @@ -9,61 +9,12 @@ pandas code style guide .. contents:: Table of contents: :local: -pandas follows the `PEP8 `_ -standard and uses `Black `_ -and `Flake8 `_ to ensure a -consistent code format throughout the project. We encourage you to use -:ref:`pre-commit ` to automatically run ``black``, -``flake8``, ``isort``, and related code checks when you make a git commit. - Patterns ======== We use a ``flake8`` plugin, `pandas-dev-flaker `_, to check our codebase for unwanted patterns. See its ``README`` for the up-to-date list of rules we enforce. -Testing -======= - -Failing tests --------------- - -See https://docs.pytest.org/en/latest/how-to/skipping.html for background. - -Do not use ``pytest.xfail`` ---------------------------- - -Do not use this method. It has the same behavior as ``pytest.skip``, namely -it immediately stops the test and does not check if the test will fail. If -this is the behavior you desire, use ``pytest.skip`` instead. - -Using ``pytest.mark.xfail`` ---------------------------- - -Use this method if a test is known to fail but the manner in which it fails -is not meant to be captured. It is common to use this method for a test that -exhibits buggy behavior or a non-implemented feature. If -the failing test has flaky behavior, use the argument ``strict=False``. This -will make it so pytest does not fail if the test happens to pass. - -Prefer the decorator ``@pytest.mark.xfail`` and the argument ``pytest.param`` -over usage within a test so that the test is appropriately marked during the -collection phase of pytest. For xfailing a test that involves multiple -parameters, a fixture, or a combination of these, it is only possible to -xfail during the testing phase. To do so, use the ``request`` fixture: - -.. code-block:: python - - import pytest - - def test_xfail(request): - mark = pytest.mark.xfail(raises=TypeError, reason="Indicate why here") - request.node.add_marker(mark) - -xfail is not to be used for tests involving failure due to invalid user arguments. -For these tests, we need to verify the correct exception type and error message -is being raised, using ``pytest.raises`` instead. - Miscellaneous ============= diff --git a/doc/source/development/contributing_codebase.rst b/doc/source/development/contributing_codebase.rst index 4826921d4866b..61e3bcd44bea8 100644 --- a/doc/source/development/contributing_codebase.rst +++ b/doc/source/development/contributing_codebase.rst @@ -44,9 +44,10 @@ Additional standards are outlined on the :ref:`pandas code style guide `_ instead -to automatically run ``black``, ``flake8``, ``isort`` when you make a git commit. This +Additionally, :ref:`Continuous Integration ` will run code formatting checks +like ``black``, ``flake8``, ``isort``, and ``cpplint`` and more using `pre-commit hooks `_ +Any warnings from these checks will cause the :ref:`Continuous Integration ` to fail; therefore, +it is helpful to run the check yourself before submitting code. This can be done by installing ``pre-commit``:: pip install pre-commit @@ -99,157 +100,8 @@ All optional dependencies should be documented in :ref:`install.optional_dependencies` and the minimum required version should be set in the ``pandas.compat._optional.VERSIONS`` dict. -C (cpplint) -~~~~~~~~~~~ - -pandas uses the `Google `_ -standard. Google provides an open source style checker called ``cpplint``, but we -use a fork of it that can be found `here `__. -Here are *some* of the more common ``cpplint`` issues: - -* we restrict line-length to 80 characters to promote readability -* every header file must include a header guard to avoid name collisions if re-included - -:ref:`Continuous Integration ` will run the -`cpplint `_ tool -and report any stylistic errors in your code. Therefore, it is helpful before -submitting code to run the check yourself:: - - cpplint --extensions=c,h --headers=h --filter=-readability/casting,-runtime/int,-build/include_subdir modified-c-file - -You can also run this command on an entire directory if necessary:: - - cpplint --extensions=c,h --headers=h --filter=-readability/casting,-runtime/int,-build/include_subdir --recursive modified-c-directory - -To make your commits compliant with this standard, you can install the -`ClangFormat `_ tool, which can be -downloaded `here `__. To configure, in your home directory, -run the following command:: - - clang-format style=google -dump-config > .clang-format - -Then modify the file to ensure that any indentation width parameters are at least four. -Once configured, you can run the tool as follows:: - - clang-format modified-c-file - -This will output what your file will look like if the changes are made, and to apply -them, run the following command:: - - clang-format -i modified-c-file - -To run the tool on an entire directory, you can run the following analogous commands:: - - clang-format modified-c-directory/*.c modified-c-directory/*.h - clang-format -i modified-c-directory/*.c modified-c-directory/*.h - -Do note that this tool is best-effort, meaning that it will try to correct as -many errors as possible, but it may not correct *all* of them. Thus, it is -recommended that you run ``cpplint`` to double check and make any other style -fixes manually. - -.. _contributing.code-formatting: - -Python (PEP8 / black) -~~~~~~~~~~~~~~~~~~~~~ - -pandas follows the `PEP8 `_ standard -and uses `Black `_ and -`Flake8 `_ to ensure a consistent code -format throughout the project. We encourage you to use :ref:`pre-commit `. - -:ref:`Continuous Integration ` will run those tools and -report any stylistic errors in your code. Therefore, it is helpful before -submitting code to run the check yourself:: - - black pandas - git diff upstream/main -u -- "*.py" | flake8 --diff - -to auto-format your code. Additionally, many editors have plugins that will -apply ``black`` as you edit files. - -You should use a ``black`` version 21.5b2 as previous versions are not compatible -with the pandas codebase. - -One caveat about ``git diff upstream/main -u -- "*.py" | flake8 --diff``: this -command will catch any stylistic errors in your changes specifically, but -be beware it may not catch all of them. For example, if you delete the only -usage of an imported function, it is stylistically incorrect to import an -unused function. However, style-checking the diff will not catch this because -the actual import is not part of the diff. Thus, for completeness, you should -run this command, though it may take longer:: - - git diff upstream/main --name-only -- "*.py" | xargs -r flake8 - -Note that on macOS, the ``-r`` flag is not available, so you have to omit it and -run this slightly modified command:: - - git diff upstream/main --name-only -- "*.py" | xargs flake8 - -Windows does not support the ``xargs`` command (unless installed for example -via the `MinGW `__ toolchain), but one can imitate the -behaviour as follows:: - - for /f %i in ('git diff upstream/main --name-only -- "*.py"') do flake8 %i - -This will get all the files being changed by the PR (and ending with ``.py``), -and run ``flake8`` on them, one after the other. - -Note that these commands can be run analogously with ``black``. - -.. _contributing.import-formatting: - -Import formatting -~~~~~~~~~~~~~~~~~ -pandas uses `isort `__ to standardise import -formatting across the codebase. - -A guide to import layout as per pep8 can be found `here `__. - -A summary of our current import sections ( in order ): - -* Future -* Python Standard Library -* Third Party -* ``pandas._libs``, ``pandas.compat``, ``pandas.util._*``, ``pandas.errors`` (largely not dependent on ``pandas.core``) -* ``pandas.core.dtypes`` (largely not dependent on the rest of ``pandas.core``) -* Rest of ``pandas.core.*`` -* Non-core ``pandas.io``, ``pandas.plotting``, ``pandas.tseries`` -* Local application/library specific imports - -Imports are alphabetically sorted within these sections. - -As part of :ref:`Continuous Integration ` checks we run:: - - isort --check-only pandas - -to check that imports are correctly formatted as per the ``setup.cfg``. - -If you see output like the below in :ref:`Continuous Integration ` checks: - -.. code-block:: shell - - Check import format using isort - ERROR: /home/travis/build/pandas-dev/pandas/pandas/io/pytables.py Imports are incorrectly sorted - Check import format using isort DONE - The command "ci/code_checks.sh" exited with 1 - -You should run:: - - isort pandas/io/pytables.py - -to automatically format imports correctly. This will modify your local copy of the files. - -Alternatively, you can run a command similar to what was suggested for ``black`` and ``flake8`` :ref:`right above `:: - - git diff upstream/main --name-only -- "*.py" | xargs -r isort - -Where similar caveats apply if you are on macOS or Windows. - -You can then verify the changes look ok, then git :any:`commit ` and :any:`push `. - Backwards compatibility -~~~~~~~~~~~~~~~~~~~~~~~ +----------------------- Please try to maintain backward compatibility. pandas has lots of users with lots of existing code, so don't break it if at all possible. If you think breakage is required, @@ -409,12 +261,7 @@ pandas uses `mypy `_ and `pyright =1.21.0) is required for type validation. @@ -475,51 +322,19 @@ use cases and writing corresponding tests. Adding tests is one of the most common requests after code is pushed to pandas. Therefore, it is worth getting in the habit of writing tests ahead of time so this is never an issue. -Like many packages, pandas uses `pytest -`_ and the convenient -extensions in `numpy.testing -`_. - -.. note:: - - The earliest supported pytest version is 5.0.1. - Writing tests ~~~~~~~~~~~~~ All tests should go into the ``tests`` subdirectory of the specific package. This folder contains many current examples of tests, and we suggest looking to these for -inspiration. If your test requires working with files or -network connectivity, there is more information on the :wiki:`Testing` of the wiki. - -The ``pandas._testing`` module has many special ``assert`` functions that -make it easier to make statements about whether Series or DataFrame objects are -equivalent. The easiest way to verify that your code is correct is to -explicitly construct the result you expect, then compare the actual result to -the expected correct result:: - - def test_pivot(self): - data = { - 'index' : ['A', 'B', 'C', 'C', 'B', 'A'], - 'columns' : ['One', 'One', 'One', 'Two', 'Two', 'Two'], - 'values' : [1., 2., 3., 3., 2., 1.] - } +inspiration. Please reference our :ref:`testing location guide ` if you are unsure +where to place a new unit test. - frame = DataFrame(data) - pivoted = frame.pivot(index='index', columns='columns', values='values') - - expected = DataFrame({ - 'One' : {'A' : 1., 'B' : 2., 'C' : 3.}, - 'Two' : {'A' : 1., 'B' : 2., 'C' : 3.} - }) - - assert_frame_equal(pivoted, expected) - -Please remember to add the Github Issue Number as a comment to a new test. -E.g. "# brief comment, see GH#28907" +Using ``pytest`` +~~~~~~~~~~~~~~~~ -Transitioning to ``pytest`` -~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Test structure +^^^^^^^^^^^^^^ pandas existing test structure is *mostly* class-based, meaning that you will typically find tests wrapped in a class. @@ -536,21 +351,55 @@ framework that will facilitate testing and developing. Thus, instead of writing def test_really_cool_feature(): pass -Using ``pytest`` -~~~~~~~~~~~~~~~~ +Preferred idioms +^^^^^^^^^^^^^^^^ + +* Functional tests named ``def test_*`` and *only* take arguments that are either fixtures or parameters. +* Use a bare ``assert`` for testing scalars and truth-testing +* Use ``tm.assert_series_equal(result, expected)`` and ``tm.assert_frame_equal(result, expected)`` for comparing :class:`Series` and :class:`DataFrame` results respectively. +* Use `@pytest.mark.parameterize `__ when testing multiple cases. +* Use `pytest.mark.xfail `__ when a test case is expected to fail. +* Use `pytest.mark.skip `__ when a test case is never expected to pass. +* Use `pytest.param `__ when a test case needs a particular mark. +* Use `@pytest.fixture `__ if multiple tests can share a setup object. + +.. warning:: + + Do not use ``pytest.xfail`` (which is different than ``pytest.mark.xfail``) since it immediately stops the + test and does not check if the test will fail. If this is the behavior you desire, use ``pytest.skip`` instead. + +If a test is known to fail but the manner in which it fails +is not meant to be captured, use ``pytest.mark.xfail`` It is common to use this method for a test that +exhibits buggy behavior or a non-implemented feature. If +the failing test has flaky behavior, use the argument ``strict=False``. This +will make it so pytest does not fail if the test happens to pass. + +Prefer the decorator ``@pytest.mark.xfail`` and the argument ``pytest.param`` +over usage within a test so that the test is appropriately marked during the +collection phase of pytest. For xfailing a test that involves multiple +parameters, a fixture, or a combination of these, it is only possible to +xfail during the testing phase. To do so, use the ``request`` fixture: + +.. code-block:: python + + def test_xfail(request): + mark = pytest.mark.xfail(raises=TypeError, reason="Indicate why here") + request.node.add_marker(mark) + +xfail is not to be used for tests involving failure due to invalid user arguments. +For these tests, we need to verify the correct exception type and error message +is being raised, using ``pytest.raises`` instead. + +If your test requires working with files or +network connectivity, there is more information on the :wiki:`Testing` of the wiki. -Here is an example of a self-contained set of tests that illustrate multiple features that we like to use. -* functional style: tests are like ``test_*`` and *only* take arguments that are either fixtures or parameters -* ``pytest.mark`` can be used to set metadata on test functions, e.g. ``skip`` or ``xfail``. -* using ``parametrize``: allow testing of multiple cases -* to set a mark on a parameter, ``pytest.param(..., marks=...)`` syntax should be used -* ``fixture``, code for object construction, on a per-test basis -* using bare ``assert`` for scalars and truth-testing -* ``tm.assert_series_equal`` (and its counter part ``tm.assert_frame_equal``), for pandas object comparisons. -* the typical pattern of constructing an ``expected`` and comparing versus the ``result`` +Example +^^^^^^^ -We would name this file ``test_cool_feature.py`` and put in an appropriate place in the ``pandas/tests/`` structure. +Here is an example of a self-contained set of tests in a file ``pandas/tests/test_cool_feature.py`` +that illustrate multiple features that we like to use. Please remember to add the Github Issue Number +as a comment to a new test. .. code-block:: python @@ -583,6 +432,7 @@ We would name this file ``test_cool_feature.py`` and put in an appropriate place def test_series(series, dtype): + # GH result = series.astype(dtype) assert result.dtype == dtype @@ -630,7 +480,7 @@ Tests that we have ``parametrized`` are now accessible via the test name, for ex Using ``hypothesis`` ~~~~~~~~~~~~~~~~~~~~ -Hypothesis is a library for property-based testing. Instead of explicitly +Hypothesis is a library for property-based testing. Instead of explicitly parametrizing a test, you can describe *all* valid inputs and let Hypothesis try to find a failing input. Even better, no matter how many random examples it tries, Hypothesis always reports a single minimal counterexample to your @@ -670,7 +520,7 @@ options or subtle interactions to test (or think of!) all of them. Testing warnings ~~~~~~~~~~~~~~~~ -By default, one of pandas CI workers will fail if any unhandled warnings are emitted. +By default, the :ref:`Continuous Integration ` will fail if any unhandled warnings are emitted. If your change involves checking that a warning is actually emitted, use ``tm.assert_produces_warning(ExpectedWarning)``. @@ -727,8 +577,7 @@ install pandas) by typing:: pytest pandas -The tests suite is exhaustive and takes around 20 minutes to run. Often it is -worth running only a subset of tests first around your changes before running the +Often it is worth running only a subset of tests first around your changes before running the entire suite. The easiest way to do this is with:: diff --git a/doc/source/development/contributing_documentation.rst b/doc/source/development/contributing_documentation.rst index 39bc582511148..583eecf1ca8ab 100644 --- a/doc/source/development/contributing_documentation.rst +++ b/doc/source/development/contributing_documentation.rst @@ -89,16 +89,6 @@ Some other important things to know about the docs: ``doc/source/reference``, else Sphinx will emit a warning. -.. note:: - - The ``.rst`` files are used to automatically generate Markdown and HTML versions - of the docs. For this reason, please do not edit ``CONTRIBUTING.md`` directly, - but instead make any changes to ``doc/source/development/contributing.rst``. Then, to - generate ``CONTRIBUTING.md``, use `pandoc `_ - with the following command:: - - pandoc doc/source/development/contributing.rst -t markdown_github > CONTRIBUTING.md - The utility script ``scripts/validate_docstrings.py`` can be used to get a csv summary of the API documentation. And also validate common errors in the docstring of a specific class, function or method. The summary also compares the list of diff --git a/doc/source/whatsnew/v1.4.1.rst b/doc/source/whatsnew/v1.4.1.rst index 10b605f6ef43e..ca8cd5f640cfd 100644 --- a/doc/source/whatsnew/v1.4.1.rst +++ b/doc/source/whatsnew/v1.4.1.rst @@ -17,8 +17,10 @@ Fixed regressions - Regression in :meth:`Series.mask` with ``inplace=True`` and ``PeriodDtype`` and an incompatible ``other`` coercing to a common dtype instead of raising (:issue:`45546`) - Regression in :func:`.assert_frame_equal` not respecting ``check_flags=False`` (:issue:`45554`) - Regression in :meth:`Series.fillna` with ``downcast=False`` incorrectly downcasting ``object`` dtype (:issue:`45603`) +- Regression in :meth:`DataFrame.iat` setting values leading to not propagating correctly in subsequent lookups (:issue:`45684`) - Regression in :meth:`DataFrame.loc.__setitem__` losing :class:`Index` name if :class:`DataFrame` was empty before (:issue:`45621`) - Regression in :func:`join` with overlapping :class:`IntervalIndex` raising an ``InvalidIndexError`` (:issue:`45661`) +- Regression in :func:`read_sql` with a DBAPI2 connection that is not an instance of ``sqlite3.Connection`` incorrectly requiring SQLAlchemy be installed (:issue:`45660`) - .. --------------------------------------------------------------------------- @@ -28,8 +30,9 @@ Fixed regressions Bug fixes ~~~~~~~~~ - Fixed segfault in :meth:``DataFrame.to_json`` when dumping tz-aware datetimes in Python 3.10 (:issue:`42130`) +- Stopped emitting unnecessary ``FutureWarning`` in :meth:`DataFrame.sort_values` with sparse columns (:issue:`45618`) - Fixed window aggregations in :meth:`DataFrame.rolling` and :meth:`Series.rolling` to skip over unused elements (:issue:`45647`) -- +- Bug in :func:`api.types.is_bool_dtype` was raising an ``AttributeError`` when evaluating a categorical :class:`Series` (:issue:`45615`) .. --------------------------------------------------------------------------- diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index 1d4054d5ea0f1..78bede643f2ac 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -35,6 +35,7 @@ Other enhancements - :class:`StringArray` now accepts array-likes containing nan-likes (``None``, ``np.nan``) for the ``values`` parameter in its constructor in addition to strings and :attr:`pandas.NA`. (:issue:`40839`) - Improved the rendering of ``categories`` in :class:`CategoricalIndex` (:issue:`45218`) - :meth:`to_numeric` now preserves float64 arrays when downcasting would generate values not representable in float32 (:issue:`43693`) +- :meth:`Series.reset_index` and :meth:`DataFrame.reset_index` now support the argument ``allow_duplicates`` (:issue:`44410`) - :meth:`.GroupBy.min` and :meth:`.GroupBy.max` now supports `Numba `_ execution with the ``engine`` keyword (:issue:`45428`) - @@ -202,6 +203,7 @@ Performance improvements ~~~~~~~~~~~~~~~~~~~~~~~~ - Performance improvement in :meth:`.GroupBy.transform` for some user-defined DataFrame -> Series functions (:issue:`45387`) - Performance improvement in :meth:`DataFrame.duplicated` when subset consists of only one column (:issue:`45236`) +- Performance improvement in :meth:`.GroupBy.transform` when broadcasting values for user-defined functions (:issue:`45708`) - .. --------------------------------------------------------------------------- @@ -220,6 +222,7 @@ Datetimelike - Bug in :meth:`DataFrame.quantile` with datetime-like dtypes and no rows incorrectly returning ``float64`` dtype instead of retaining datetime-like dtype (:issue:`41544`) - Bug in :func:`to_datetime` with sequences of ``np.str_`` objects incorrectly raising (:issue:`32264`) - Bug in :class:`Timestamp` construction when passing datetime components as positional arguments and ``tzinfo`` as a keyword argument incorrectly raising (:issue:`31929`) +- Bug in :meth:`Index.astype` when casting from object dtype to ``timedelta64[ns]`` dtype incorrectly casting ``np.datetime64("NaT")`` values to ``np.timedelta64("NaT")`` instead of raising (:issue:`45722`) - Timedelta @@ -244,7 +247,7 @@ Conversion - Bug in :meth:`Float64Index.astype` to unsigned integer dtype incorrectly casting to ``np.int64`` dtype (:issue:`45309`) - Bug in :meth:`Series.astype` and :meth:`DataFrame.astype` from floating dtype to unsigned integer dtype failing to raise in the presence of negative values (:issue:`45151`) - Bug in :func:`array` with ``FloatingDtype`` and values containing float-castable strings incorrectly raising (:issue:`45424`) -- +- Bug when comparing string and datetime64ns objects causing ``OverflowError`` exception. (:issue:`45506`) Strings ^^^^^^^ @@ -262,6 +265,7 @@ Indexing - Bug in :meth:`DataFrame.iloc` where indexing a single row on a :class:`DataFrame` with a single ExtensionDtype column gave a copy instead of a view on the underlying data (:issue:`45241`) - Bug in setting a NA value (``None`` or ``np.nan``) into a :class:`Series` with int-based :class:`IntervalDtype` incorrectly casting to object dtype instead of a float-based :class:`IntervalDtype` (:issue:`45568`) - Bug in :meth:`Series.__setitem__` with a non-integer :class:`Index` when using an integer key to set a value that cannot be set inplace where a ``ValueError`` was raised insead of casting to a common dtype (:issue:`45070`) +- Bug in :meth:`Series.loc.__setitem__` and :meth:`Series.loc.__getitem__` not raising when using multiple keys without using a :class:`MultiIndex` (:issue:`13831`) - Bug when setting a value too large for a :class:`Series` dtype failing to coerce to a common type (:issue:`26049`, :issue:`32878`) - Bug in :meth:`loc.__setitem__` treating ``range`` keys as positional instead of label-based (:issue:`45479`) - Bug in :meth:`Series.__setitem__` when setting ``boolean`` dtype values containing ``NA`` incorrectly raising instead of casting to ``boolean`` dtype (:issue:`45462`) @@ -274,7 +278,7 @@ Indexing Missing ^^^^^^^ -- +- Bug in :meth:`Series.fillna` and :meth:`DataFrame.fillna` with ``downcast`` keyword not being respected in some cases where there are no NA values present (:issue:`45423`) - MultiIndex @@ -306,7 +310,7 @@ Plotting Groupby/resample/rolling ^^^^^^^^^^^^^^^^^^^^^^^^ - Bug in :meth:`DataFrame.resample` ignoring ``closed="right"`` on :class:`TimedeltaIndex` (:issue:`45414`) -- +- Bug in :meth:`.DataFrameGroupBy.transform` fails when the input DataFrame has multiple columns (:issue:`27469`) Reshaping ^^^^^^^^^ @@ -316,7 +320,7 @@ Reshaping Sparse ^^^^^^ -- +- Bug in :meth:`Series.where` and :meth:`DataFrame.where` with ``SparseDtype`` failing to retain the array's ``fill_value`` (:issue:`45691`) - ExtensionArray diff --git a/pandas/_libs/index.pyx b/pandas/_libs/index.pyx index fe8e8d92f699a..d8311282d1193 100644 --- a/pandas/_libs/index.pyx +++ b/pandas/_libs/index.pyx @@ -128,10 +128,12 @@ cdef class IndexEngine: self._np_type = values.dtype.type def __contains__(self, val: object) -> bool: - # We assume before we get here: - # - val is hashable - self._ensure_mapping_populated() - return val in self.mapping + hash(val) + try: + self.get_loc(val) + except KeyError: + return False + return True cpdef get_loc(self, object val): # -> Py_ssize_t | slice | ndarray[bool] @@ -141,7 +143,7 @@ cdef class IndexEngine: if is_definitely_invalid_key(val): raise TypeError(f"'{val}' is an invalid key") - self._check_type(val) + val = self._check_type(val) if self.over_size_threshold and self.is_monotonic_increasing: if not self.is_unique: @@ -270,6 +272,7 @@ cdef class IndexEngine: cdef _check_type(self, object val): hash(val) + return val @property def is_mapping_populated(self) -> bool: diff --git a/pandas/_libs/index_class_helper.pxi.in b/pandas/_libs/index_class_helper.pxi.in index 7a2bbec96e413..5798396c72e2d 100644 --- a/pandas/_libs/index_class_helper.pxi.in +++ b/pandas/_libs/index_class_helper.pxi.in @@ -35,6 +35,10 @@ cdef class {{name}}Engine(IndexEngine): cdef _check_type(self, object val): {{if name not in {'Float64', 'Float32'} }} if not util.is_integer_object(val): + if util.is_float_object(val): + # Make sure Int64Index.get_loc(2.0) works + if val.is_integer(): + return int(val) raise KeyError(val) {{if name.startswith("U")}} if val < 0: @@ -46,6 +50,7 @@ cdef class {{name}}Engine(IndexEngine): # in particular catch bool and avoid casting True -> 1.0 raise KeyError(val) {{endif}} + return val {{endfor}} diff --git a/pandas/_libs/lib.pyi b/pandas/_libs/lib.pyi index 6a1519c827c7a..ad77e9e533b0b 100644 --- a/pandas/_libs/lib.pyi +++ b/pandas/_libs/lib.pyi @@ -157,10 +157,6 @@ def ensure_string_array( def infer_datetimelike_array( arr: npt.NDArray[np.object_], ) -> tuple[str, bool]: ... -def astype_intsafe( - arr: npt.NDArray[np.object_], - new_dtype: np.dtype, -) -> np.ndarray: ... def convert_nans_to_NA( arr: npt.NDArray[np.object_], ) -> npt.NDArray[np.object_]: ... diff --git a/pandas/_libs/lib.pyx b/pandas/_libs/lib.pyx index 23faa3e0304a9..c86eb80da93f7 100644 --- a/pandas/_libs/lib.pyx +++ b/pandas/_libs/lib.pyx @@ -648,26 +648,6 @@ def array_equivalent_object(left: object[:], right: object[:]) -> bool: return True -@cython.wraparound(False) -@cython.boundscheck(False) -def astype_intsafe(ndarray[object] arr, cnp.dtype new_dtype) -> ndarray: - cdef: - Py_ssize_t i, n = len(arr) - object val - bint is_datelike - ndarray result - - is_datelike = new_dtype == 'm8[ns]' - result = np.empty(n, dtype=new_dtype) - for i in range(n): - val = arr[i] - if is_datelike and checknull(val): - result[i] = NPY_NAT - else: - result[i] = val - - return result - ctypedef fused ndarr_object: ndarray[object, ndim=1] ndarray[object, ndim=2] diff --git a/pandas/_libs/src/headers/cmath b/pandas/_libs/src/headers/cmath deleted file mode 100644 index 9e7540cfefc13..0000000000000 --- a/pandas/_libs/src/headers/cmath +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef _PANDAS_MATH_H_ -#define _PANDAS_MATH_H_ - -// MSVC 2017 has a bug where `x == x` can be true for NaNs. -// MSC_VER from https://stackoverflow.com/a/70630/1889400 -// Place upper bound on this check once a fixed MSVC is released. -#if defined(_MSC_VER) && (_MSC_VER < 1800) -#include -// In older versions of Visual Studio there wasn't a std::signbit defined -// This defines it using _copysign -namespace std { - __inline int isnan(double x) { return _isnan(x); } - __inline int signbit(double num) { return _copysign(1.0, num) < 0; } - __inline int notnan(double x) { return !isnan(x); } -} -#elif defined(_MSC_VER) && (_MSC_VER >= 1900) -#include -namespace std { - __inline int isnan(double x) { return _isnan(x); } - __inline int notnan(double x) { return !isnan(x); } -} -#elif defined(_MSC_VER) -#include -namespace std { - __inline int isnan(double x) { return _isnan(x); } - __inline int notnan(double x) { return x == x; } -} -#elif defined(__MVS__) -#include - -#define _signbit signbit -#undef signbit -#undef isnan - -namespace std { - __inline int notnan(double x) { return x == x; } - __inline int signbit(double num) { return _signbit(num); } - __inline int isnan(double x) { return isnan(x); } -} -#else -#include - -namespace std { - __inline int notnan(double x) { return x == x; } -} - -#endif -#endif diff --git a/pandas/_libs/window/aggregations.pyx b/pandas/_libs/window/aggregations.pyx index ff53a577af33f..0689a4a6e75f0 100644 --- a/pandas/_libs/window/aggregations.pyx +++ b/pandas/_libs/window/aggregations.pyx @@ -2,7 +2,11 @@ import cython -from libc.math cimport round +from libc.math cimport ( + round, + signbit, + sqrt, +) from libcpp.deque cimport deque from pandas._libs.algos cimport TiebreakEnumType @@ -19,14 +23,8 @@ from numpy cimport ( cnp.import_array() - -cdef extern from "../src/headers/cmath" namespace "std": - bint isnan(float64_t) nogil - bint notnan(float64_t) nogil - int signbit(float64_t) nogil - float64_t sqrt(float64_t x) nogil - from pandas._libs.algos import is_monotonic + from pandas._libs.dtypes cimport numeric_t @@ -94,7 +92,7 @@ cdef inline void add_sum(float64_t val, int64_t *nobs, float64_t *sum_x, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] + 1 y = val - compensation[0] t = sum_x[0] + y @@ -110,7 +108,7 @@ cdef inline void remove_sum(float64_t val, int64_t *nobs, float64_t *sum_x, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 y = - val - compensation[0] t = sum_x[0] + y @@ -199,7 +197,7 @@ cdef inline void add_mean(float64_t val, Py_ssize_t *nobs, float64_t *sum_x, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] + 1 y = val - compensation[0] t = sum_x[0] + y @@ -215,7 +213,7 @@ cdef inline void remove_mean(float64_t val, Py_ssize_t *nobs, float64_t *sum_x, cdef: float64_t y, t - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 y = - val - compensation[0] t = sum_x[0] + y @@ -304,8 +302,8 @@ cdef inline void add_var(float64_t val, float64_t *nobs, float64_t *mean_x, cdef: float64_t delta, prev_mean, y, t - # `isnan` instead of equality as fix for GH-21813, msvc 2017 bug - if isnan(val): + # GH#21813, if msvc 2017 bug is resolved, we should be OK with != instead of `isnan` + if val != val: return nobs[0] = nobs[0] + 1 @@ -329,7 +327,7 @@ cdef inline void remove_var(float64_t val, float64_t *nobs, float64_t *mean_x, """ remove a value from the var calc """ cdef: float64_t delta, prev_mean, y, t - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 if nobs[0]: # Welford's method for the online variance-calculation @@ -455,7 +453,7 @@ cdef inline void add_skew(float64_t val, int64_t *nobs, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] + 1 y = val - compensation_x[0] @@ -483,7 +481,7 @@ cdef inline void remove_skew(float64_t val, int64_t *nobs, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 y = - val - compensation_x[0] @@ -525,7 +523,7 @@ def roll_skew(ndarray[float64_t] values, ndarray[int64_t] start, with nogil: for i in range(0, V): val = values_copy[i] - if notnan(val): + if val == val: nobs_mean += 1 sum_val += val mean_val = sum_val / nobs_mean @@ -633,7 +631,7 @@ cdef inline void add_kurt(float64_t val, int64_t *nobs, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] + 1 y = val - compensation_x[0] @@ -666,7 +664,7 @@ cdef inline void remove_kurt(float64_t val, int64_t *nobs, float64_t y, t # Not NaN - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 y = - val - compensation_x[0] @@ -712,7 +710,7 @@ def roll_kurt(ndarray[float64_t] values, ndarray[int64_t] start, with nogil: for i in range(0, V): val = values_copy[i] - if notnan(val): + if val == val: nobs_mean += 1 sum_val += val mean_val = sum_val / nobs_mean @@ -816,7 +814,7 @@ def roll_median_c(const float64_t[:] values, ndarray[int64_t] start, # setup for j in range(s, e): val = values[j] - if notnan(val): + if val == val: nobs += 1 err = skiplist_insert(sl, val) == -1 if err: @@ -827,7 +825,7 @@ def roll_median_c(const float64_t[:] values, ndarray[int64_t] start, # calculate adds for j in range(end[i - 1], e): val = values[j] - if notnan(val): + if val == val: nobs += 1 err = skiplist_insert(sl, val) == -1 if err: @@ -836,7 +834,7 @@ def roll_median_c(const float64_t[:] values, ndarray[int64_t] start, # calculate deletes for j in range(start[i - 1], s): val = values[j] - if notnan(val): + if val == val: skiplist_remove(sl, val) nobs -= 1 if nobs >= minp: @@ -1097,7 +1095,7 @@ def roll_quantile(const float64_t[:] values, ndarray[int64_t] start, # setup for j in range(s, e): val = values[j] - if notnan(val): + if val == val: nobs += 1 skiplist_insert(skiplist, val) @@ -1105,14 +1103,14 @@ def roll_quantile(const float64_t[:] values, ndarray[int64_t] start, # calculate adds for j in range(end[i - 1], e): val = values[j] - if notnan(val): + if val == val: nobs += 1 skiplist_insert(skiplist, val) # calculate deletes for j in range(start[i - 1], s): val = values[j] - if notnan(val): + if val == val: skiplist_remove(skiplist, val) nobs -= 1 if nobs >= minp: @@ -1222,7 +1220,7 @@ def roll_rank(const float64_t[:] values, ndarray[int64_t] start, # setup for j in range(s, e): val = values[j] if ascending else -values[j] - if notnan(val): + if val == val: nobs += 1 rank = skiplist_insert(skiplist, val) if rank == -1: @@ -1249,14 +1247,14 @@ def roll_rank(const float64_t[:] values, ndarray[int64_t] start, # calculate deletes for j in range(start[i - 1], s): val = values[j] if ascending else -values[j] - if notnan(val): + if val == val: skiplist_remove(skiplist, val) nobs -= 1 # calculate adds for j in range(end[i - 1], e): val = values[j] if ascending else -values[j] - if notnan(val): + if val == val: nobs += 1 rank = skiplist_insert(skiplist, val) if rank == -1: @@ -1492,7 +1490,7 @@ cdef inline void add_weighted_var(float64_t val, cdef: float64_t temp, q, r - if isnan(val): + if val != val: return nobs[0] = nobs[0] + 1 @@ -1538,7 +1536,7 @@ cdef inline void remove_weighted_var(float64_t val, cdef: float64_t temp, q, r - if notnan(val): + if val == val: nobs[0] = nobs[0] - 1 if nobs[0]: @@ -1608,7 +1606,7 @@ def roll_weighted_var(const float64_t[:] values, const float64_t[:] weights, w = weights[i % win_n] pre_w = weights[(i - win_n) % win_n] - if notnan(val): + if val == val: if pre_val == pre_val: remove_weighted_var(pre_val, pre_w, &t, &sum_w, &mean, &nobs) diff --git a/pandas/_testing/_io.py b/pandas/_testing/_io.py index 097af99dbfd88..f4654582277df 100644 --- a/pandas/_testing/_io.py +++ b/pandas/_testing/_io.py @@ -29,8 +29,6 @@ Series, ) -_RAISE_NETWORK_ERROR_DEFAULT = False - # skip tests on exceptions with these messages _network_error_messages = ( # 'urlopen error timed out', @@ -70,10 +68,12 @@ def _get_default_network_errors(): - # Lazy import for http.client because it imports many things from the stdlib + # Lazy import for http.client & urllib.error + # because it imports many things from the stdlib import http.client + import urllib.error - return (OSError, http.client.HTTPException, TimeoutError) + return (OSError, http.client.HTTPException, TimeoutError, urllib.error.URLError) def optional_args(decorator): @@ -108,7 +108,7 @@ def dec(f): def network( t, url="https://www.google.com", - raise_on_error=_RAISE_NETWORK_ERROR_DEFAULT, + raise_on_error=False, check_before_test=False, error_classes=None, skip_errnos=_network_errno_vals, @@ -163,8 +163,8 @@ def network( Tests decorated with @network will fail if it's possible to make a network connection to another URL (defaults to google.com):: - >>> from pandas import _testing as ts - >>> @ts.network + >>> from pandas import _testing as tm + >>> @tm.network ... def test_network(): ... with pd.io.common.urlopen("rabbit://bonanza.com"): ... pass @@ -175,10 +175,10 @@ def network( You can specify alternative URLs:: - >>> @ts.network("https://www.yahoo.com") + >>> @tm.network("https://www.yahoo.com") ... def test_something_with_yahoo(): ... raise OSError("Failure Message") - >>> test_something_with_yahoo() + >>> test_something_with_yahoo() # doctest: +SKIP Traceback (most recent call last): ... OSError: Failure Message @@ -186,7 +186,7 @@ def network( If you set check_before_test, it will check the url first and not run the test on failure:: - >>> @ts.network("failing://url.blaher", check_before_test=True) + >>> @tm.network("failing://url.blaher", check_before_test=True) ... def test_something(): ... print("I ran!") ... raise ValueError("Failure") @@ -196,7 +196,7 @@ def network( Errors not related to networking will always be raised. """ - from pytest import skip + import pytest if error_classes is None: error_classes = _get_default_network_errors() @@ -210,7 +210,9 @@ def wrapper(*args, **kwargs): and not raise_on_error and not can_connect(url, error_classes) ): - skip() + pytest.skip( + f"May not have network connectivity because cannot connect to {url}" + ) try: return t(*args, **kwargs) except Exception as err: @@ -220,22 +222,21 @@ def wrapper(*args, **kwargs): errno = getattr(err.reason, "errno", None) # type: ignore[attr-defined] if errno in skip_errnos: - skip(f"Skipping test due to known errno and error {err}") + pytest.skip(f"Skipping test due to known errno and error {err}") e_str = str(err) if any(m.lower() in e_str.lower() for m in _skip_on_messages): - skip( + pytest.skip( f"Skipping test because exception message is known and error {err}" ) - if not isinstance(err, error_classes): - raise - - if raise_on_error or can_connect(url, error_classes): + if not isinstance(err, error_classes) or raise_on_error: raise else: - skip(f"Skipping test due to lack of connectivity and error {err}") + pytest.skip( + f"Skipping test due to lack of connectivity and error {err}" + ) return wrapper diff --git a/pandas/conftest.py b/pandas/conftest.py index 952177f342c46..ba90c9eedb53c 100644 --- a/pandas/conftest.py +++ b/pandas/conftest.py @@ -1734,6 +1734,14 @@ def indexer_sli(request): return request.param +@pytest.fixture(params=[tm.loc, tm.iloc]) +def indexer_li(request): + """ + Parametrize over loc.__getitem__, iloc.__getitem__ + """ + return request.param + + @pytest.fixture(params=[tm.setitem, tm.iloc]) def indexer_si(request): """ diff --git a/pandas/core/arrays/datetimelike.py b/pandas/core/arrays/datetimelike.py index 2f26f6cc22f80..3259ee7d28bbe 100644 --- a/pandas/core/arrays/datetimelike.py +++ b/pandas/core/arrays/datetimelike.py @@ -389,11 +389,16 @@ def __setitem__( # type: ignore[override] # to a period in from_sequence). For DatetimeArray, it's Timestamp... # I don't know if mypy can do that, possibly with Generics. # https://mypy.readthedocs.io/en/latest/generics.html + no_op = check_setitem_lengths(key, value, self) + + # Calling super() before the no_op short-circuit means that we raise + # on invalid 'value' even if this is a no-op, e.g. wrong-dtype empty array. + super().__setitem__(key, value) + if no_op: return - super().__setitem__(key, value) self._maybe_clear_freq() def _maybe_clear_freq(self): diff --git a/pandas/core/arrays/datetimes.py b/pandas/core/arrays/datetimes.py index 9c262fa37d760..8ac1f54059154 100644 --- a/pandas/core/arrays/datetimes.py +++ b/pandas/core/arrays/datetimes.py @@ -37,7 +37,10 @@ tzconversion, ) from pandas._typing import npt -from pandas.errors import PerformanceWarning +from pandas.errors import ( + OutOfBoundsDatetime, + PerformanceWarning, +) from pandas.util._exceptions import find_stack_level from pandas.util._validators import validate_inclusive @@ -2215,6 +2218,9 @@ def objects_to_datetime64ns( return values.view("i8"), tz_parsed except (ValueError, TypeError): raise err + except OverflowError as err: + # Exception is raised when a part of date is greater than 32 bit signed int + raise OutOfBoundsDatetime("Out of bounds nanosecond timestamp") from err if tz_parsed is not None: # We can take a shortcut since the datetime64 numpy array diff --git a/pandas/core/arrays/interval.py b/pandas/core/arrays/interval.py index 33732bcaca733..d23910c37b52b 100644 --- a/pandas/core/arrays/interval.py +++ b/pandas/core/arrays/interval.py @@ -39,6 +39,7 @@ from pandas.errors import IntCastingNaNError from pandas.util._decorators import Appender +from pandas.core.dtypes.cast import LossySetitemError from pandas.core.dtypes.common import ( is_categorical_dtype, is_dtype_equal, @@ -1081,7 +1082,7 @@ def _validate_listlike(self, value): try: self.left._validate_fill_value(value_left) - except (ValueError, TypeError) as err: + except (LossySetitemError, TypeError) as err: msg = ( "'value' should be a compatible interval type, " f"got {type(value)} instead." diff --git a/pandas/core/arrays/sparse/array.py b/pandas/core/arrays/sparse/array.py index 18621fa9fb68a..bedde2dbf2558 100644 --- a/pandas/core/arrays/sparse/array.py +++ b/pandas/core/arrays/sparse/array.py @@ -1355,7 +1355,8 @@ def _where(self, mask, value): # NB: may not preserve dtype, e.g. result may be Sparse[float64] # while self is Sparse[int64] naive_implementation = np.where(mask, self, value) - result = type(self)._from_sequence(naive_implementation) + dtype = SparseDtype(naive_implementation.dtype, fill_value=self.fill_value) + result = type(self)._from_sequence(naive_implementation, dtype=dtype) return result # ------------------------------------------------------------------------ diff --git a/pandas/core/dtypes/astype.py b/pandas/core/dtypes/astype.py index 7c7b7f3ba097f..0e7bb1ed293d8 100644 --- a/pandas/core/dtypes/astype.py +++ b/pandas/core/dtypes/astype.py @@ -15,6 +15,7 @@ import numpy as np from pandas._libs import lib +from pandas._libs.tslibs.timedeltas import array_to_timedelta64 from pandas._typing import ( ArrayLike, DtypeObj, @@ -138,14 +139,10 @@ def astype_nansafe( elif is_object_dtype(arr.dtype): - # work around NumPy brokenness, #1987 - if np.issubdtype(dtype.type, np.integer): - return lib.astype_intsafe(arr, dtype) - # if we have a datetime/timedelta array of objects # then coerce to a proper dtype and recall astype_nansafe - elif is_datetime64_dtype(dtype): + if is_datetime64_dtype(dtype): from pandas import to_datetime return astype_nansafe( @@ -154,9 +151,10 @@ def astype_nansafe( copy=copy, ) elif is_timedelta64_dtype(dtype): - from pandas import to_timedelta - - return astype_nansafe(to_timedelta(arr)._values, dtype, copy=copy) + # bc we know arr.dtype == object, this is equivalent to + # `np.asarray(to_timedelta(arr))`, but using a lower-level API that + # does not require a circular import. + return array_to_timedelta64(arr).view("m8[ns]").astype(dtype, copy=False) if dtype.name in ("datetime64", "timedelta64"): msg = ( diff --git a/pandas/core/dtypes/cast.py b/pandas/core/dtypes/cast.py index fe5b464a5a18d..1645ee13724b3 100644 --- a/pandas/core/dtypes/cast.py +++ b/pandas/core/dtypes/cast.py @@ -87,6 +87,7 @@ ) from pandas.core.dtypes.inference import is_list_like from pandas.core.dtypes.missing import ( + array_equivalent, is_valid_na_for_dtype, isna, na_value_for_dtype, @@ -1923,6 +1924,8 @@ def can_hold_element(arr: ArrayLike, element: Any) -> bool: arr._validate_setitem_value(element) return True except (ValueError, TypeError): + # TODO(2.0): stop catching ValueError for tzaware, see + # _catch_deprecated_value_error return False # This is technically incorrect, but maintains the behavior of @@ -1932,7 +1935,7 @@ def can_hold_element(arr: ArrayLike, element: Any) -> bool: try: np_can_hold_element(dtype, element) return True - except (TypeError, ValueError): + except (TypeError, LossySetitemError): return False @@ -1962,7 +1965,7 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: if isinstance(element, range): if _dtype_can_hold_range(element, dtype): return element - raise ValueError + raise LossySetitemError elif is_integer(element) or (is_float(element) and element.is_integer()): # e.g. test_setitem_series_int8 if we have a python int 1 @@ -1970,8 +1973,8 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: # in smaller int dtypes. info = np.iinfo(dtype) if info.min <= element <= info.max: - return element - raise ValueError + return dtype.type(element) + raise LossySetitemError if tipo is not None: if tipo.kind not in ["i", "u"]: @@ -1985,10 +1988,10 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: # np.putmask, whereas the raw values cannot. # see TestSetitemFloatNDarrayIntoIntegerSeries return casted - raise ValueError + raise LossySetitemError # Anything other than integer we cannot hold - raise ValueError + raise LossySetitemError elif ( dtype.kind == "u" and isinstance(element, np.ndarray) @@ -2000,37 +2003,46 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: # TODO: faster to check (element >=0).all()? potential # itemsize issues there? return casted - raise ValueError + raise LossySetitemError elif dtype.itemsize < tipo.itemsize: - raise ValueError + raise LossySetitemError elif not isinstance(tipo, np.dtype): # i.e. nullable IntegerDtype; we can put this into an ndarray # losslessly iff it has no NAs if element._hasna: - raise ValueError + raise LossySetitemError return element return element - raise ValueError + raise LossySetitemError elif dtype.kind == "f": if tipo is not None: # TODO: itemsize check? if tipo.kind not in ["f", "i", "u"]: # Anything other than float/integer we cannot hold - raise ValueError + raise LossySetitemError elif not isinstance(tipo, np.dtype): # i.e. nullable IntegerDtype or FloatingDtype; # we can put this into an ndarray losslessly iff it has no NAs if element._hasna: - raise ValueError + raise LossySetitemError return element + elif tipo.itemsize > dtype.itemsize: + if isinstance(element, np.ndarray): + # e.g. TestDataFrameIndexingWhere::test_where_alignment + casted = element.astype(dtype) + # TODO(np>=1.20): we can just use np.array_equal with equal_nan + if array_equivalent(casted, element): + return casted + raise LossySetitemError + return element if lib.is_integer(element) or lib.is_float(element): return element - raise ValueError + raise LossySetitemError elif dtype.kind == "c": if lib.is_integer(element) or lib.is_complex(element) or lib.is_float(element): @@ -2042,13 +2054,13 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: if casted == element: return casted # otherwise e.g. overflow see test_32878_complex_itemsize - raise ValueError + raise LossySetitemError if tipo is not None: if tipo.kind in ["c", "f", "i", "u"]: return element - raise ValueError - raise ValueError + raise LossySetitemError + raise LossySetitemError elif dtype.kind == "b": if tipo is not None: @@ -2057,12 +2069,12 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: # i.e. we have a BooleanArray if element._hasna: # i.e. there are pd.NA elements - raise ValueError + raise LossySetitemError return element - raise ValueError + raise LossySetitemError if lib.is_bool(element): return element - raise ValueError + raise LossySetitemError elif dtype.kind == "S": # TODO: test tests.frame.methods.test_replace tests get here, @@ -2070,10 +2082,10 @@ def np_can_hold_element(dtype: np.dtype, element: Any) -> Any: if tipo is not None: if tipo.kind == "S" and tipo.itemsize <= dtype.itemsize: return element - raise ValueError + raise LossySetitemError if isinstance(element, bytes) and len(element) <= dtype.itemsize: return element - raise ValueError + raise LossySetitemError raise NotImplementedError(dtype) @@ -2087,3 +2099,11 @@ def _dtype_can_hold_range(rng: range, dtype: np.dtype) -> bool: if not len(rng): return True return np.can_cast(rng[0], dtype) and np.can_cast(rng[-1], dtype) + + +class LossySetitemError(Exception): + """ + Raised when trying to do a __setitem__ on an np.ndarray that is not lossless. + """ + + pass diff --git a/pandas/core/dtypes/common.py b/pandas/core/dtypes/common.py index 109073c7511d0..6776064342db0 100644 --- a/pandas/core/dtypes/common.py +++ b/pandas/core/dtypes/common.py @@ -1319,7 +1319,7 @@ def is_bool_dtype(arr_or_dtype) -> bool: return False if isinstance(dtype, CategoricalDtype): - arr_or_dtype = arr_or_dtype.categories + arr_or_dtype = dtype.categories # now we use the special definition for Index if isinstance(arr_or_dtype, ABCIndex): diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 11690dd057796..d5b32d7a5dea0 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -93,6 +93,8 @@ ) from pandas.core.dtypes.cast import ( + LossySetitemError, + can_hold_element, construct_1d_arraylike_from_scalar, construct_2d_arraylike_from_scalar, find_common_type, @@ -1365,8 +1367,6 @@ def itertuples( ----- The column names will be renamed to positional names if they are invalid Python identifiers, repeated, or start with an underscore. - On python versions < 3.7 regular tuples are returned for DataFrames - with a large number of columns (>254). Examples -------- @@ -3878,16 +3878,16 @@ def _set_value( try: if takeable: series = self._ixs(col, axis=1) - series._set_value(index, value, takeable=True) - return + loc = index + else: + series = self._get_item_cache(col) + loc = self.index.get_loc(index) - series = self._get_item_cache(col) - loc = self.index.get_loc(index) + # setitem_inplace will do validation that may raise TypeError, + # ValueError, or LossySetitemError + series._mgr.setitem_inplace(loc, value) - # series._set_value will do validation that may raise TypeError - # or ValueError - series._set_value(loc, value, takeable=True) - except (KeyError, TypeError, ValueError): + except (KeyError, TypeError, ValueError, LossySetitemError): # set using a non-recursive method & reset the cache if takeable: self.iloc[index, col] = value @@ -4392,7 +4392,7 @@ def insert( loc: int, column: Hashable, value: Scalar | AnyArrayLike, - allow_duplicates: bool = False, + allow_duplicates: bool | lib.NoDefault = lib.no_default, ) -> None: """ Insert column into DataFrame at specified location. @@ -4407,7 +4407,7 @@ def insert( column : str, number, or hashable object Label of the inserted column. value : Scalar, Series, or array-like - allow_duplicates : bool, optional default False + allow_duplicates : bool, optional, default lib.no_default See Also -------- @@ -4439,6 +4439,8 @@ def insert( 0 NaN 100 1 99 3 1 5.0 100 2 99 4 """ + if allow_duplicates is lib.no_default: + allow_duplicates = False if allow_duplicates and not self.flags.allows_duplicate_labels: raise ValueError( "Cannot specify 'allow_duplicates=True' when " @@ -5366,6 +5368,48 @@ def shift( result.columns = self.columns.copy() return result + elif ( + axis == 1 + and periods != 0 + and fill_value is not lib.no_default + and ncols > 0 + ): + arrays = self._mgr.arrays + if len(arrays) > 1 or ( + # If we only have one block and we know that we can't + # keep the same dtype (i.e. the _can_hold_element check) + # then we can go through the reindex_indexer path + # (and avoid casting logic in the Block method). + # The exception to this (until 2.0) is datetimelike + # dtypes with integers, which cast. + not can_hold_element(arrays[0], fill_value) + # TODO(2.0): remove special case for integer-with-datetimelike + # once deprecation is enforced + and not ( + lib.is_integer(fill_value) and needs_i8_conversion(arrays[0].dtype) + ) + ): + # GH#35488 we need to watch out for multi-block cases + # We only get here with fill_value not-lib.no_default + nper = abs(periods) + nper = min(nper, ncols) + if periods > 0: + indexer = np.array( + [-1] * nper + list(range(ncols - periods)), dtype=np.intp + ) + else: + indexer = np.array( + list(range(nper, ncols)) + [-1] * nper, dtype=np.intp + ) + mgr = self._mgr.reindex_indexer( + self.columns, + indexer, + axis=0, + fill_value=fill_value, + allow_dups=True, + ) + res_df = self._constructor(mgr) + return res_df.__finalize__(self, method="shift") return super().shift( periods=periods, freq=freq, axis=axis, fill_value=fill_value @@ -5581,6 +5625,7 @@ def reset_index( inplace: Literal[False] = ..., col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> DataFrame: ... @@ -5592,6 +5637,7 @@ def reset_index( inplace: Literal[True], col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> None: ... @@ -5603,6 +5649,7 @@ def reset_index( inplace: Literal[True], col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> None: ... @@ -5614,6 +5661,7 @@ def reset_index( inplace: Literal[True], col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> None: ... @@ -5624,6 +5672,7 @@ def reset_index( inplace: Literal[True], col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> None: ... @@ -5635,6 +5684,7 @@ def reset_index( inplace: bool = ..., col_level: Hashable = ..., col_fill: Hashable = ..., + allow_duplicates: bool | lib.NoDefault = ..., ) -> DataFrame | None: ... @@ -5646,6 +5696,7 @@ def reset_index( inplace: bool = False, col_level: Hashable = 0, col_fill: Hashable = "", + allow_duplicates: bool | lib.NoDefault = lib.no_default, ) -> DataFrame | None: """ Reset the index, or a level of it. @@ -5671,6 +5722,10 @@ def reset_index( col_fill : object, default '' If the columns have multiple levels, determines how the other levels are named. If None then the index name is repeated. + allow_duplicates : bool, optional, default lib.no_default + Allow duplicate column labels to be created. + + .. versionadded:: 1.5.0 Returns ------- @@ -5794,6 +5849,8 @@ class max type new_obj = self else: new_obj = self.copy() + if allow_duplicates is not lib.no_default: + allow_duplicates = validate_bool_kwarg(allow_duplicates, "allow_duplicates") new_index = default_index(len(new_obj)) if level is not None: @@ -5845,7 +5902,12 @@ class max type level_values, lab, allow_fill=True, fill_value=lev._na_value ) - new_obj.insert(0, name, level_values) + new_obj.insert( + 0, + name, + level_values, + allow_duplicates=allow_duplicates, + ) new_obj.index = new_index if not inplace: @@ -9480,7 +9542,7 @@ def _series_round(ser: Series, decimals: int): if len(new_cols) > 0: return self._constructor( concat(new_cols, axis=1), index=self.index, columns=self.columns - ) + ).__finalize__(self, method="round") else: return self @@ -9868,7 +9930,8 @@ def count( FutureWarning, stacklevel=find_stack_level(), ) - return self._count_level(level, axis=axis, numeric_only=numeric_only) + res = self._count_level(level, axis=axis, numeric_only=numeric_only) + return res.__finalize__(self, method="count") if numeric_only: frame = self._get_numeric_data() @@ -9891,7 +9954,7 @@ def count( counts, index=frame._get_agg_axis(axis) ) - return result.astype("int64") + return result.astype("int64").__finalize__(self, method="count") def _count_level(self, level: Level, axis: int = 0, numeric_only: bool = False): if numeric_only: @@ -10521,13 +10584,14 @@ def quantile( dtype = cdtype if is_list_like(q): - return self._constructor([], index=q, columns=cols, dtype=dtype) + res = self._constructor([], index=q, columns=cols, dtype=dtype) + return res.__finalize__(self, method="quantile") return self._constructor_sliced([], index=cols, name=q, dtype=dtype) res = data._mgr.quantile(qs=q, axis=1, interpolation=interpolation) result = self._constructor(res) - return result + return result.__finalize__(self, method="quantile") @doc(NDFrame.asfreq, **_shared_doc_kwargs) def asfreq( @@ -10744,7 +10808,7 @@ def isin(self, values) -> DataFrame: from pandas.core.reshape.concat import concat values = collections.defaultdict(list, values) - return concat( + result = concat( ( self.iloc[:, [i]].isin(values[col]) for i, col in enumerate(self.columns) @@ -10754,11 +10818,11 @@ def isin(self, values) -> DataFrame: elif isinstance(values, Series): if not values.index.is_unique: raise ValueError("cannot compute isin with a duplicate axis.") - return self.eq(values.reindex_like(self), axis="index") + result = self.eq(values.reindex_like(self), axis="index") elif isinstance(values, DataFrame): if not (values.columns.is_unique and values.index.is_unique): raise ValueError("cannot compute isin with a duplicate axis.") - return self.eq(values.reindex_like(self)) + result = self.eq(values.reindex_like(self)) else: if not is_list_like(values): raise TypeError( @@ -10766,11 +10830,12 @@ def isin(self, values) -> DataFrame: "to be passed to DataFrame.isin(), " f"you passed a '{type(values).__name__}'" ) - return self._constructor( + result = self._constructor( algorithms.isin(self.values.ravel(), values).reshape(self.shape), self.index, self.columns, ) + return result.__finalize__(self, method="isin") # ---------------------------------------------------------------------- # Add index and columns diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 4971c7f34cfdb..a497475ebd182 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1646,7 +1646,7 @@ def __abs__(self: NDFrameT) -> NDFrameT: @final def __round__(self: NDFrameT, decimals: int = 0) -> NDFrameT: - return self.round(decimals) + return self.round(decimals).__finalize__(self, method="__round__") # ------------------------------------------------------------------------- # Label or Level Combination Helpers @@ -10383,7 +10383,7 @@ def pct_change( # We want to restore the original index rs = rs.loc[~rs.index.duplicated()] rs = rs.reindex_like(data) - return rs + return rs.__finalize__(self, method="pct_change") @final def _agg_by_level( diff --git a/pandas/core/groupby/generic.py b/pandas/core/groupby/generic.py index 175067b4b7c20..949f369849323 100644 --- a/pandas/core/groupby/generic.py +++ b/pandas/core/groupby/generic.py @@ -472,7 +472,7 @@ def _transform_general(self, func: Callable, *args, **kwargs) -> Series: result.name = self.obj.name return result - def _can_use_transform_fast(self, result) -> bool: + def _can_use_transform_fast(self, func: str, result) -> bool: return True def filter(self, func, dropna: bool = True, *args, **kwargs): @@ -1185,9 +1185,10 @@ def transform(self, func, *args, engine=None, engine_kwargs=None, **kwargs): func, *args, engine=engine, engine_kwargs=engine_kwargs, **kwargs ) - def _can_use_transform_fast(self, result) -> bool: - return isinstance(result, DataFrame) and result.columns.equals( - self._obj_with_exclusions.columns + def _can_use_transform_fast(self, func: str, result) -> bool: + return func == "size" or ( + isinstance(result, DataFrame) + and result.columns.equals(self._obj_with_exclusions.columns) ) def _define_paths(self, func, *args, **kwargs): @@ -1795,7 +1796,7 @@ def _wrap_transform_general_frame( res_frame.index = group.index else: res_frame = obj._constructor( - np.concatenate([res.values] * len(group.index)).reshape(group.shape), + np.tile(res.values, (len(group.index), 1)), columns=group.columns, index=group.index, ) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 7bb7c9a6a8a46..5cd1228fec756 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -1650,7 +1650,7 @@ def _transform(self, func, *args, engine=None, engine_kwargs=None, **kwargs): with com.temp_setattr(self, "observed", True): result = getattr(self, func)(*args, **kwargs) - if self._can_use_transform_fast(result): + if self._can_use_transform_fast(func, result): return self._wrap_transform_fast_result(result) # only reached for DataFrameGroupBy diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index 935d61447df7b..8bbaa7cddba62 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -68,6 +68,7 @@ from pandas.core.dtypes.astype import astype_nansafe from pandas.core.dtypes.cast import ( + LossySetitemError, can_hold_element, common_dtype_categorical_compat, ensure_dtype_can_hold_na, @@ -5071,12 +5072,13 @@ def _validate_fill_value(self, value): """ dtype = self.dtype if isinstance(dtype, np.dtype) and dtype.kind not in ["m", "M"]: + # return np_can_hold_element(dtype, value) try: return np_can_hold_element(dtype, value) - except ValueError as err: + except LossySetitemError as err: # re-raise as TypeError for consistency raise TypeError from err - if not can_hold_element(self._values, value): + elif not can_hold_element(self._values, value): raise TypeError return value @@ -5294,7 +5296,7 @@ def putmask(self, mask, value) -> Index: value = self._na_value try: converted = self._validate_fill_value(value) - except (ValueError, TypeError) as err: + except (LossySetitemError, ValueError, TypeError) as err: if is_object_dtype(self): # pragma: no cover raise err @@ -6420,8 +6422,6 @@ def _maybe_cast_indexer(self, key): If we have a float key and are not a floating index, then try to cast to an int if equivalent. """ - if not self.is_floating(): - return com.cast_scalar_indexer(key) return key def _maybe_cast_listlike_indexer(self, target) -> Index: @@ -6719,7 +6719,7 @@ def insert(self, loc: int, item) -> Index: return type(self)._simple_new(res_values, name=self.name) else: item = self._validate_fill_value(item) - except (TypeError, ValueError): + except (TypeError, ValueError, LossySetitemError): # e.g. trying to insert an integer into a DatetimeIndex # We cannot keep the same dtype, so cast to the (often object) # minimal shared dtype before doing the insert. diff --git a/pandas/core/indexes/numeric.py b/pandas/core/indexes/numeric.py index bc4d7a495dcd7..bc6c21ac52bc8 100644 --- a/pandas/core/indexes/numeric.py +++ b/pandas/core/indexes/numeric.py @@ -25,7 +25,6 @@ from pandas.core.dtypes.common import ( is_dtype_equal, - is_float, is_float_dtype, is_integer_dtype, is_numeric_dtype, @@ -213,22 +212,6 @@ def _ensure_dtype(cls, dtype: Dtype | None) -> np.dtype | None: # dtype for Int64Index, UInt64Index etc. Needed for backwards compat. return cls._default_dtype - def __contains__(self, key) -> bool: - """ - Check if key is a float and has a decimal. If it has, return False. - """ - if not is_integer_dtype(self.dtype): - return super().__contains__(key) - - hash(key) - try: - if is_float(key) and int(key) != key: - # otherwise the `key in self._engine` check casts e.g. 1.1 -> 1 - return False - return key in self._engine - except (OverflowError, TypeError, ValueError): - return False - # ---------------------------------------------------------------- # Indexing Methods diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 38be6fe27db31..785ddf5e29f1b 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -54,6 +54,7 @@ is_empty_indexer, is_exact_shape_match, is_list_like_indexer, + is_scalar_indexer, length_of_indexer, ) from pandas.core.indexes.api import ( @@ -671,6 +672,71 @@ def _get_setitem_indexer(self, key): return self._convert_to_indexer(key, axis=0) + @final + def _maybe_mask_setitem_value(self, indexer, value): + """ + If we have obj.iloc[mask] = series_or_frame and series_or_frame has the + same length as obj, we treat this as obj.iloc[mask] = series_or_frame[mask], + similar to Series.__setitem__. + + Note this is only for loc, not iloc. + """ + + if ( + isinstance(indexer, tuple) + and len(indexer) == 2 + and isinstance(value, (ABCSeries, ABCDataFrame)) + ): + pi, icols = indexer + ndim = value.ndim + if com.is_bool_indexer(pi) and len(value) == len(pi): + newkey = pi.nonzero()[0] + + if is_scalar_indexer(icols, self.ndim - 1) and ndim == 1: + # e.g. test_loc_setitem_boolean_mask_allfalse + if len(newkey) == 0: + # FIXME: kludge for test_loc_setitem_boolean_mask_allfalse + # TODO(GH#45333): may be fixed when deprecation is enforced + + value = value.iloc[:0] + else: + # test_loc_setitem_ndframe_values_alignment + value = self.obj.iloc._align_series(indexer, value) + indexer = (newkey, icols) + + elif ( + isinstance(icols, np.ndarray) + and icols.dtype.kind == "i" + and len(icols) == 1 + ): + if ndim == 1: + # We implicitly broadcast, though numpy does not, see + # github.com/pandas-dev/pandas/pull/45501#discussion_r789071825 + if len(newkey) == 0: + # FIXME: kludge for + # test_setitem_loc_only_false_indexer_dtype_changed + # TODO(GH#45333): may be fixed when deprecation is enforced + value = value.iloc[:0] + else: + # test_loc_setitem_ndframe_values_alignment + value = self.obj.iloc._align_series(indexer, value) + indexer = (newkey, icols) + + elif ndim == 2 and value.shape[1] == 1: + if len(newkey) == 0: + # FIXME: kludge for + # test_loc_setitem_all_false_boolean_two_blocks + # TODO(GH#45333): may be fixed when deprecation is enforced + value = value.iloc[:0] + else: + # test_loc_setitem_ndframe_values_alignment + value = self.obj.iloc._align_frame(indexer, value) + indexer = (newkey, icols) + elif com.is_bool_indexer(indexer): + indexer = indexer.nonzero()[0] + + return indexer, value + @final def _tupleize_axis_indexer(self, key) -> tuple: """ @@ -934,7 +1000,7 @@ def _getitem_nested_tuple(self, tup: tuple): # we are only getting non-hashable tuples, in particular ones # that themselves contain a slice entry # See test_loc_series_getitem_too_many_dimensions - raise ValueError("Too many indices") + raise IndexingError("Too many indexers") # this is a series with a multi-index specified a tuple of # selectors @@ -1260,6 +1326,14 @@ def _convert_to_indexer(self, key, axis: int): is_int_index = labels.is_integer() is_int_positional = is_integer(key) and not is_int_index + if ( + isinstance(key, tuple) + and not isinstance(labels, MultiIndex) + and self.ndim < 2 + and len(key) > 1 + ): + raise IndexingError("Too many indexers") + if is_scalar(key) or (isinstance(labels, MultiIndex) and is_hashable(key)): # Otherwise get_loc will raise InvalidIndexError @@ -1291,7 +1365,7 @@ def _convert_to_indexer(self, key, axis: int): if is_nested_tuple(key, labels): if self.ndim == 1 and any(isinstance(k, tuple) for k in key): # GH#35349 Raise if tuple in tuple for series - raise ValueError("Too many indices") + raise IndexingError("Too many indexers") return labels.get_locs(key) elif is_list_like_indexer(key): @@ -1301,8 +1375,7 @@ def _convert_to_indexer(self, key, axis: int): if com.is_bool_indexer(key): key = check_bool_indexer(labels, key) - (inds,) = key.nonzero() - return inds + return key else: return self._get_listlike_indexer(key, axis)[1] else: @@ -1696,6 +1769,10 @@ def _setitem_with_indexer(self, indexer, value, name="iloc"): self._setitem_with_indexer_missing(indexer, value) return + if name == "loc": + # must come after setting of missing + indexer, value = self._maybe_mask_setitem_value(indexer, value) + # align and set the values if take_split_path: # We have to operate column-wise diff --git a/pandas/core/internals/array_manager.py b/pandas/core/internals/array_manager.py index 80e1d0bede2cd..c7ec4f35e0ff1 100644 --- a/pandas/core/internals/array_manager.py +++ b/pandas/core/internals/array_manager.py @@ -15,6 +15,7 @@ from pandas._libs import ( NaT, + algos as libalgos, lib, ) from pandas._typing import ( @@ -382,6 +383,11 @@ def shift(self: T, periods: int, axis: int, fill_value) -> T: ) def fillna(self: T, value, limit, inplace: bool, downcast) -> T: + + if limit is not None: + # Do this validation even if we go through one of the no-op paths + limit = libalgos.validate_limit(None, limit=limit) + return self.apply_with_block( "fillna", value=value, limit=limit, inplace=inplace, downcast=downcast ) diff --git a/pandas/core/internals/blocks.py b/pandas/core/internals/blocks.py index f9657953045c6..4f530ffc5ed5d 100644 --- a/pandas/core/internals/blocks.py +++ b/pandas/core/internals/blocks.py @@ -17,12 +17,12 @@ from pandas._libs import ( Timestamp, - algos as libalgos, internals as libinternals, lib, writers, ) from pandas._libs.internals import BlockPlacement +from pandas._libs.tslibs import IncompatibleFrequency from pandas._typing import ( ArrayLike, DtypeObj, @@ -36,10 +36,11 @@ from pandas.core.dtypes.astype import astype_array_safe from pandas.core.dtypes.cast import ( + LossySetitemError, can_hold_element, find_result_type, - maybe_downcast_numeric, maybe_downcast_to_dtype, + np_can_hold_element, soft_convert_objects, ) from pandas.core.dtypes.common import ( @@ -105,11 +106,7 @@ ensure_wrapped_if_datetimelike, extract_array, ) -from pandas.core.indexers import ( - check_setitem_lengths, - is_empty_indexer, - is_scalar_indexer, -) +from pandas.core.indexers import check_setitem_lengths import pandas.core.missing as missing if TYPE_CHECKING: @@ -380,9 +377,9 @@ def set_inplace(self, locs, values: ArrayLike) -> None: """ self.values[locs] = values - def delete(self, loc) -> None: + def delete(self, loc) -> Block: """ - Delete given loc(-s) from block in-place. + Return a new Block with the given loc(s) deleted. """ # Argument 1 to "delete" has incompatible type "Union[ndarray[Any, Any], # ExtensionArray]"; expected "Union[_SupportsArray[dtype[Any]], @@ -390,13 +387,9 @@ def delete(self, loc) -> None: # [_SupportsArray[dtype[Any]]]], Sequence[Sequence[Sequence[ # _SupportsArray[dtype[Any]]]]], Sequence[Sequence[Sequence[Sequence[ # _SupportsArray[dtype[Any]]]]]]]" [arg-type] - self.values = np.delete(self.values, loc, 0) # type: ignore[arg-type] - self.mgr_locs = self._mgr_locs.delete(loc) - try: - self._cache.clear() - except AttributeError: - # _cache not yet initialized - pass + values = np.delete(self.values, loc, 0) # type: ignore[arg-type] + mgr_locs = self._mgr_locs.delete(loc) + return type(self)(values, placement=mgr_locs, ndim=self.ndim) @final def apply(self, func, **kwargs) -> list[Block]: @@ -451,36 +444,42 @@ def _split_op_result(self, result: ArrayLike) -> list[Block]: return [nb] def fillna( - self, value, limit=None, inplace: bool = False, downcast=None + self, value, limit: int | None = None, inplace: bool = False, downcast=None ) -> list[Block]: """ fillna on the block with the value. If we fail, then convert to ObjectBlock and try again """ + # Caller is responsible for validating limit; if int it is strictly positive inplace = validate_bool_kwarg(inplace, "inplace") - mask = isna(self.values) - mask, noop = validate_putmask(self.values, mask) - - if limit is not None: - limit = libalgos.validate_limit(None, limit=limit) - mask[mask.cumsum(self.ndim - 1) > limit] = False - if not self._can_hold_na: + # can short-circuit the isna call + noop = True + else: + mask = isna(self.values) + mask, noop = validate_putmask(self.values, mask) + + if noop: + # we can't process the value, but nothing to do if inplace: + # Arbitrarily imposing the convention that we ignore downcast + # on no-op when inplace=True return [self] else: - return [self.copy()] + # GH#45423 consistent downcasting on no-ops. + nb = self.copy() + nbs = nb._maybe_downcast([nb], downcast=downcast) + return nbs + + if limit is not None: + mask[mask.cumsum(self.ndim - 1) > limit] = False if self._can_hold_element(value): nb = self if inplace else self.copy() putmask_inplace(nb.values, mask, value) return nb._maybe_downcast([nb], downcast) - if noop: - # we can't process the value, but nothing to do - return [self] if inplace else [self.copy()] - elif self.ndim == 1 or self.shape[0] == 1: blk = self.coerce_to_target_dtype(value) # bc we have already cast, inplace=True may avoid an extra copy @@ -917,12 +916,6 @@ def setitem(self, indexer, value): value = self._standardize_fill_value(value) - # coerce if block dtype can store value - if not self._can_hold_element(value): - # current dtype cannot store value, coerce to common dtype - return self.coerce_to_target_dtype(value).setitem(indexer, value) - - # value must be storable at this moment values = cast(np.ndarray, self.values) if self.ndim == 2: values = values.T @@ -930,19 +923,22 @@ def setitem(self, indexer, value): # length checking check_setitem_lengths(indexer, value, values) - if is_empty_indexer(indexer): - # GH#8669 empty indexers, test_loc_setitem_boolean_mask_allfalse - pass - - elif is_scalar_indexer(indexer, self.ndim): - # setting a single element for each dim and with a rhs that could - # be e.g. a list; see GH#6043 - values[indexer] = value - + value = extract_array(value, extract_numpy=True) + try: + casted = np_can_hold_element(values.dtype, value) + except LossySetitemError: + # current dtype cannot store value, coerce to common dtype + nb = self.coerce_to_target_dtype(value) + return nb.setitem(indexer, value) else: - value = setitem_datetimelike_compat(values, len(values[indexer]), value) - values[indexer] = value - + if self.dtype == _dtype_obj: + # TODO: avoid having to construct values[indexer] + vi = values[indexer] + if lib.is_list_like(vi): + # checking lib.is_scalar here fails on + # test_iloc_setitem_custom_object + casted = setitem_datetimelike_compat(values, len(vi), casted) + values[indexer] = casted return self def putmask(self, mask, new) -> list[Block]: @@ -1190,13 +1186,19 @@ def where(self, other, cond) -> list[Block]: other = self._standardize_fill_value(other) - if not self._can_hold_element(other): + try: + # try/except here is equivalent to a self._can_hold_element check, + # but this gets us back 'casted' which we will re-use below; + # without using 'casted', expressions.where may do unwanted upcasts. + casted = np_can_hold_element(values.dtype, other) + except (ValueError, TypeError, LossySetitemError): # we cannot coerce, return a compat dtype block = self.coerce_to_target_dtype(other) blocks = block.where(orig_other, cond) return self._maybe_downcast(blocks, "infer") else: + other = casted alt = setitem_datetimelike_compat(values, icond.sum(), other) if alt is not other: if is_list_like(other) and len(other) < len(values): @@ -1226,38 +1228,13 @@ def where(self, other, cond) -> list[Block]: # Note: expressions.where may upcast. result = expressions.where(~icond, values, other) + # The np_can_hold_element check _should_ ensure that we always + # have result.dtype == self.dtype here. - if self._can_hold_na or self.ndim == 1: - - if transpose: - result = result.T - - return [self.make_block(result)] - - # might need to separate out blocks - cond = ~icond - axis = cond.ndim - 1 - cond = cond.swapaxes(axis, 0) - mask = cond.all(axis=1) - - result_blocks: list[Block] = [] - for m in [mask, ~mask]: - if m.any(): - taken = result.take(m.nonzero()[0], axis=axis) - r = maybe_downcast_numeric(taken, self.dtype) - if r.dtype != taken.dtype: - warnings.warn( - "Downcasting integer-dtype results in .where is " - "deprecated and will change in a future version. " - "To retain the old behavior, explicitly cast the results " - "to the desired dtype.", - FutureWarning, - stacklevel=find_stack_level(), - ) - nb = self.make_block(r.T, placement=self._mgr_locs[m]) - result_blocks.append(nb) + if transpose: + result = result.T - return result_blocks + return [self.make_block(result)] def _unstack( self, @@ -1365,10 +1342,8 @@ def setitem(self, indexer, value): `indexer` is a direct slice/positional indexer. `value` must be a compatible shape. """ - if not self._can_hold_element(value): - # see TestSetitemFloatIntervalWithIntIntervalValues - nb = self.coerce_to_target_dtype(value) - return nb.setitem(indexer, value) + orig_indexer = indexer + orig_value = value indexer = self._unwrap_setitem_indexer(indexer) value = self._maybe_squeeze_arg(value) @@ -1379,8 +1354,26 @@ def setitem(self, indexer, value): # unconditionally values = values.T check_setitem_lengths(indexer, value, values) - values[indexer] = value - return self + + try: + values[indexer] = value + except (ValueError, TypeError) as err: + _catch_deprecated_value_error(err) + + if is_interval_dtype(self.dtype): + # see TestSetitemFloatIntervalWithIntIntervalValues + nb = self.coerce_to_target_dtype(orig_value) + return nb.setitem(orig_indexer, orig_value) + + elif isinstance(self, NDArrayBackedExtensionBlock): + nb = self.coerce_to_target_dtype(orig_value) + return nb.setitem(orig_indexer, orig_value) + + else: + raise + + else: + return self def where(self, other, cond) -> list[Block]: arr = self.values.T @@ -1471,8 +1464,9 @@ def putmask(self, mask, new) -> list[Block]: return [self] def fillna( - self, value, limit=None, inplace: bool = False, downcast=None + self, value, limit: int | None = None, inplace: bool = False, downcast=None ) -> list[Block]: + # Caller is responsible for validating limit; if int it is strictly positive try: new_values = self.values.fillna(value=value, limit=limit) @@ -1504,18 +1498,11 @@ def fillna( return [self.make_block_same_class(values=new_values)] - def delete(self, loc) -> None: - """ - Delete given loc(-s) from block in-place. - """ + def delete(self, loc) -> Block: # This will be unnecessary if/when __array_function__ is implemented - self.values = self.values.delete(loc) - self.mgr_locs = self._mgr_locs.delete(loc) - try: - self._cache.clear() - except AttributeError: - # _cache not yet initialized - pass + values = self.values.delete(loc) + mgr_locs = self._mgr_locs.delete(loc) + return type(self)(values, placement=mgr_locs, ndim=self.ndim) @cache_readonly def array_values(self) -> ExtensionArray: @@ -1893,7 +1880,12 @@ def _catch_deprecated_value_error(err: Exception) -> None: if isinstance(err, ValueError): # TODO(2.0): once DTA._validate_setitem_value deprecation # is enforced, stop catching ValueError here altogether - if "Timezones don't match" not in str(err): + if isinstance(err, IncompatibleFrequency): + pass + elif "'value.closed' is" in str(err): + # IntervalDtype mismatched 'closed' + pass + elif "Timezones don't match" not in str(err): raise diff --git a/pandas/core/internals/managers.py b/pandas/core/internals/managers.py index 8599a1281a976..6297a7578ccd4 100644 --- a/pandas/core/internals/managers.py +++ b/pandas/core/internals/managers.py @@ -14,6 +14,7 @@ import numpy as np from pandas._libs import ( + algos as libalgos, internals as libinternals, lib, ) @@ -36,7 +37,6 @@ is_1d_only_ea_dtype, is_dtype_equal, is_list_like, - needs_i8_conversion, ) from pandas.core.dtypes.dtypes import ExtensionDtype from pandas.core.dtypes.generic import ( @@ -366,53 +366,14 @@ def shift(self: T, periods: int, axis: int, fill_value) -> T: if fill_value is lib.no_default: fill_value = None - if ( - axis == 0 - and self.ndim == 2 - and ( - self.nblocks > 1 - or ( - # If we only have one block and we know that we can't - # keep the same dtype (i.e. the _can_hold_element check) - # then we can go through the reindex_indexer path - # (and avoid casting logic in the Block method). - # The exception to this (until 2.0) is datetimelike - # dtypes with integers, which cast. - not self.blocks[0]._can_hold_element(fill_value) - # TODO(2.0): remove special case for integer-with-datetimelike - # once deprecation is enforced - and not ( - lib.is_integer(fill_value) - and needs_i8_conversion(self.blocks[0].dtype) - ) - ) - ) - ): - # GH#35488 we need to watch out for multi-block cases - # We only get here with fill_value not-lib.no_default - ncols = self.shape[0] - nper = abs(periods) - nper = min(nper, ncols) - if periods > 0: - indexer = np.array( - [-1] * nper + list(range(ncols - periods)), dtype=np.intp - ) - else: - indexer = np.array( - list(range(nper, ncols)) + [-1] * nper, dtype=np.intp - ) - result = self.reindex_indexer( - self.items, - indexer, - axis=0, - fill_value=fill_value, - allow_dups=True, - ) - return result - return self.apply("shift", periods=periods, axis=axis, fill_value=fill_value) def fillna(self: T, value, limit, inplace: bool, downcast) -> T: + + if limit is not None: + # Do this validation even if we go through one of the no-op paths + limit = libalgos.validate_limit(None, limit=limit) + return self.apply( "fillna", value=value, limit=limit, inplace=inplace, downcast=downcast ) @@ -1133,8 +1094,12 @@ def value_getitem(placement): if len(val_locs) == len(blk.mgr_locs): removed_blknos.append(blkno_l) else: - blk.delete(blk_locs) - self._blklocs[blk.mgr_locs.indexer] = np.arange(len(blk)) + nb = blk.delete(blk_locs) + blocks_tup = ( + self.blocks[:blkno_l] + (nb,) + self.blocks[blkno_l + 1 :] + ) + self.blocks = blocks_tup + self._blklocs[nb.mgr_locs.indexer] = np.arange(len(nb)) if len(removed_blknos): # Remove blocks & update blknos accordingly @@ -1869,8 +1834,10 @@ def idelete(self, indexer) -> SingleBlockManager: Ensures that self.blocks doesn't become empty. """ - self._block.delete(indexer) + nb = self._block.delete(indexer) + self.blocks = (nb,) self.axes[0] = self.axes[0].delete(indexer) + self._cache.clear() return self def fast_xs(self, loc): diff --git a/pandas/core/series.py b/pandas/core/series.py index 596953652d2ff..e4ba9ef2825e3 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -62,6 +62,7 @@ ) from pandas.core.dtypes.cast import ( + LossySetitemError, convert_dtypes, maybe_box_native, maybe_cast_pointwise_result, @@ -1102,7 +1103,7 @@ def __setitem__(self, key, value) -> None: # GH#12862 adding a new key to the Series self.loc[key] = value - except (TypeError, ValueError): + except (TypeError, ValueError, LossySetitemError): # The key was OK, but we cannot set the value losslessly indexer = self.index.get_loc(key) self._set_values(indexer, value) @@ -1359,7 +1360,14 @@ def repeat(self, repeats, axis=None) -> Series: ) @deprecate_nonkeyword_arguments(version=None, allowed_args=["self", "level"]) - def reset_index(self, level=None, drop=False, name=lib.no_default, inplace=False): + def reset_index( + self, + level=None, + drop=False, + name=lib.no_default, + inplace=False, + allow_duplicates: bool = False, + ): """ Generate a new DataFrame or Series with the index reset. @@ -1381,6 +1389,10 @@ def reset_index(self, level=None, drop=False, name=lib.no_default, inplace=False when `drop` is True. inplace : bool, default False Modify the Series in place (do not create a new object). + allow_duplicates : bool, default False + Allow duplicate column labels to be created. + + .. versionadded:: 1.5.0 Returns ------- @@ -1497,7 +1509,9 @@ def reset_index(self, level=None, drop=False, name=lib.no_default, inplace=False name = self.name df = self.to_frame(name) - return df.reset_index(level=level, drop=drop) + return df.reset_index( + level=level, drop=drop, allow_duplicates=allow_duplicates + ) # ---------------------------------------------------------------------- # Rendering Methods @@ -1799,7 +1813,8 @@ def to_frame(self, name: Hashable = lib.no_default) -> DataFrame: columns = Index([name]) mgr = self._mgr.to_2d_mgr(columns) - return self._constructor_expanddim(mgr) + df = self._constructor_expanddim(mgr) + return df.__finalize__(self, method="to_frame") def _set_name(self, name, inplace=False) -> Series: """ diff --git a/pandas/core/sorting.py b/pandas/core/sorting.py index ac306b1687381..7ab53ccf7cb8d 100644 --- a/pandas/core/sorting.py +++ b/pandas/core/sorting.py @@ -10,6 +10,7 @@ Iterable, Sequence, ) +import warnings import numpy as np @@ -320,7 +321,12 @@ def lexsort_indexer( keys = [ensure_key_mapped(k, key) for k in keys] for k, order in zip(keys, orders): - cat = Categorical(k, ordered=True) + with warnings.catch_warnings(): + # TODO(2.0): unnecessary once deprecation is enforced + # GH#45618 don't issue warning user can't do anything about + warnings.filterwarnings("ignore", ".*SparseArray.*", category=FutureWarning) + + cat = Categorical(k, ordered=True) if na_position not in ["last", "first"]: raise ValueError(f"invalid na_position: {na_position}") diff --git a/pandas/io/excel/_base.py b/pandas/io/excel/_base.py index 3e1df9325713b..b33955737a111 100644 --- a/pandas/io/excel/_base.py +++ b/pandas/io/excel/_base.py @@ -1048,6 +1048,12 @@ def engine(self) -> str: """Name of engine.""" pass + @property + @abc.abstractmethod + def sheets(self) -> dict[str, Any]: + """Mapping of sheet names to sheet objects.""" + pass + @abc.abstractmethod def write_cells( self, @@ -1112,7 +1118,6 @@ def __init__( self.handles = get_handle( path, mode, storage_options=storage_options, is_text=False ) - self.sheets: dict[str, Any] = {} self.cur_sheet = None if date_format is None: diff --git a/pandas/io/excel/_odswriter.py b/pandas/io/excel/_odswriter.py index 0f31991ee29e9..9069a37ccb5af 100644 --- a/pandas/io/excel/_odswriter.py +++ b/pandas/io/excel/_odswriter.py @@ -58,6 +58,17 @@ def __init__( self.book = OpenDocumentSpreadsheet(**engine_kwargs) self._style_dict: dict[str, str] = {} + @property + def sheets(self) -> dict[str, Any]: + """Mapping of sheet names to sheet objects.""" + from odf.table import Table + + result = { + sheet.getAttribute("name"): sheet + for sheet in self.book.getElementsByType(Table) + } + return result + def save(self) -> None: """ Save workbook to disk. @@ -91,7 +102,7 @@ def write_cells( wks = self.sheets[sheet_name] else: wks = Table(name=sheet_name) - self.sheets[sheet_name] = wks + self.book.spreadsheet.addElement(wks) if validate_freeze_panes(freeze_panes): freeze_panes = cast(Tuple[int, int], freeze_panes) diff --git a/pandas/io/excel/_openpyxl.py b/pandas/io/excel/_openpyxl.py index 88a25d1c1e6ef..4b03c2536b31b 100644 --- a/pandas/io/excel/_openpyxl.py +++ b/pandas/io/excel/_openpyxl.py @@ -68,8 +68,6 @@ def __init__( self.book = load_workbook(self.handles.handle, **engine_kwargs) self.handles.handle.seek(0) - self.sheets = {name: self.book[name] for name in self.book.sheetnames} - else: # Create workbook object with default optimized_write=True. self.book = Workbook(**engine_kwargs) @@ -77,6 +75,12 @@ def __init__( if self.book.worksheets: self.book.remove(self.book.worksheets[0]) + @property + def sheets(self) -> dict[str, Any]: + """Mapping of sheet names to sheet objects.""" + result = {name: self.book[name] for name in self.book.sheetnames} + return result + def save(self) -> None: """ Save workbook to disk. @@ -440,7 +444,6 @@ def write_cells( target_index = self.book.index(old_wks) del self.book[sheet_name] wks = self.book.create_sheet(sheet_name, target_index) - self.sheets[sheet_name] = wks elif self.if_sheet_exists == "error": raise ValueError( f"Sheet '{sheet_name}' already exists and " @@ -458,7 +461,6 @@ def write_cells( else: wks = self.book.create_sheet() wks.title = sheet_name - self.sheets[sheet_name] = wks if validate_freeze_panes(freeze_panes): freeze_panes = cast(Tuple[int, int], freeze_panes) diff --git a/pandas/io/excel/_xlsxwriter.py b/pandas/io/excel/_xlsxwriter.py index 49c87732f1429..dbd6264827591 100644 --- a/pandas/io/excel/_xlsxwriter.py +++ b/pandas/io/excel/_xlsxwriter.py @@ -205,6 +205,11 @@ def __init__( self.book = Workbook(self.handles.handle, **engine_kwargs) + @property + def sheets(self) -> dict[str, Any]: + result = self.book.sheetnames + return result + def save(self) -> None: """ Save workbook to disk. @@ -222,11 +227,9 @@ def write_cells( # Write the frame cells using xlsxwriter. sheet_name = self._get_sheet_name(sheet_name) - if sheet_name in self.sheets: - wks = self.sheets[sheet_name] - else: + wks = self.book.get_worksheet_by_name(sheet_name) + if wks is None: wks = self.book.add_worksheet(sheet_name) - self.sheets[sheet_name] = wks style_dict = {"null": None} diff --git a/pandas/io/excel/_xlwt.py b/pandas/io/excel/_xlwt.py index 1ada0eb25f81c..fe2addc890c22 100644 --- a/pandas/io/excel/_xlwt.py +++ b/pandas/io/excel/_xlwt.py @@ -63,6 +63,12 @@ def __init__( self.fm_datetime = xlwt.easyxf(num_format_str=self.datetime_format) self.fm_date = xlwt.easyxf(num_format_str=self.date_format) + @property + def sheets(self) -> dict[str, Any]: + """Mapping of sheet names to sheet objects.""" + result = {sheet.name: sheet for sheet in self.book._Workbook__worksheets} + return result + def save(self) -> None: """ Save workbook to disk. diff --git a/pandas/io/parsers/readers.py b/pandas/io/parsers/readers.py index ef693fcbd3720..5f93eef4fd977 100644 --- a/pandas/io/parsers/readers.py +++ b/pandas/io/parsers/readers.py @@ -542,13 +542,11 @@ def _read( """Generic reader of line files.""" # if we pass a date_parser and parse_dates=False, we should not parse the # dates GH#44366 - if ( - kwds.get("date_parser", None) is not None - and kwds.get("parse_dates", None) is None - ): - kwds["parse_dates"] = True - elif kwds.get("parse_dates", None) is None: - kwds["parse_dates"] = False + if kwds.get("parse_dates", None) is None: + if kwds.get("date_parser", None) is None: + kwds["parse_dates"] = False + else: + kwds["parse_dates"] = True # Extract some of the arguments (pass chunksize on). iterator = kwds.get("iterator", False) @@ -564,7 +562,7 @@ def _read( "The 'chunksize' option is not supported with the 'pyarrow' engine" ) else: - chunksize = validate_integer("chunksize", kwds.get("chunksize", None), 1) + chunksize = validate_integer("chunksize", chunksize, 1) nrows = kwds.get("nrows", None) diff --git a/pandas/io/sql.py b/pandas/io/sql.py index fcb3f5177ae3f..ba18412856d6c 100644 --- a/pandas/io/sql.py +++ b/pandas/io/sql.py @@ -736,12 +736,15 @@ def pandasSQL_builder(con, schema: str | None = None): if isinstance(con, sqlite3.Connection) or con is None: return SQLiteDatabase(con) - sqlalchemy = import_optional_dependency("sqlalchemy") + sqlalchemy = import_optional_dependency("sqlalchemy", errors="ignore") if isinstance(con, str): - con = sqlalchemy.create_engine(con) + if sqlalchemy is None: + raise ImportError("Using URI string without sqlalchemy installed.") + else: + con = sqlalchemy.create_engine(con) - if isinstance(con, sqlalchemy.engine.Connectable): + if sqlalchemy is not None and isinstance(con, sqlalchemy.engine.Connectable): return SQLDatabase(con, schema=schema) warnings.warn( diff --git a/pandas/tests/apply/test_series_apply.py b/pandas/tests/apply/test_series_apply.py index b7084e2bc6dc7..d89394d737286 100644 --- a/pandas/tests/apply/test_series_apply.py +++ b/pandas/tests/apply/test_series_apply.py @@ -284,8 +284,6 @@ def test_transform_partial_failure(op, request): raises=AssertionError, reason=f"{op} is successful on any dtype" ) ) - if op in ("rank", "fillna"): - pytest.skip(f"{op} doesn't raise TypeError on object") # Using object makes most transform kernels fail ser = Series(3 * [object]) @@ -497,9 +495,13 @@ def test_map(datetime_series): tm.assert_series_equal(a.map(c), exp) -def test_map_empty(index): +def test_map_empty(request, index): if isinstance(index, MultiIndex): - pytest.skip("Initializing a Series from a MultiIndex is not supported") + request.node.add_marker( + pytest.mark.xfail( + reason="Initializing a Series from a MultiIndex is not supported" + ) + ) s = Series(index) result = s.map({}) diff --git a/pandas/tests/apply/test_str.py b/pandas/tests/apply/test_str.py index 82997328529cd..4fefc79e04aad 100644 --- a/pandas/tests/apply/test_str.py +++ b/pandas/tests/apply/test_str.py @@ -55,7 +55,7 @@ def test_with_string_args(datetime_series): @pytest.mark.parametrize("op", ["mean", "median", "std", "var"]) @pytest.mark.parametrize("how", ["agg", "apply"]) -def test_apply_np_reducer(float_frame, op, how): +def test_apply_np_reducer(op, how): # GH 39116 float_frame = DataFrame({"a": [1, 2], "b": [3, 4]}) result = getattr(float_frame, how)(op) @@ -256,19 +256,10 @@ def test_transform_groupby_kernel_series(string_series, op): @pytest.mark.parametrize("op", frame_transform_kernels) -def test_transform_groupby_kernel_frame( - axis, float_frame, op, using_array_manager, request -): +def test_transform_groupby_kernel_frame(axis, float_frame, op, request): # TODO(2.0) Remove after pad/backfill deprecation enforced op = maybe_normalize_deprecated_kernels(op) # GH 35964 - if using_array_manager and op == "pct_change" and axis in (1, "columns"): - # TODO(ArrayManager) shift with axis=1 - request.node.add_marker( - pytest.mark.xfail( - reason="shift axis=1 not yet implemented for ArrayManager" - ) - ) args = [0.0] if op == "fillna" else [] if axis == 0 or axis == "index": diff --git a/pandas/tests/arrays/categorical/common.py b/pandas/tests/arrays/categorical/common.py index 4ef9390656979..86d80c5476195 100644 --- a/pandas/tests/arrays/categorical/common.py +++ b/pandas/tests/arrays/categorical/common.py @@ -2,7 +2,7 @@ class TestCategorical: - def setup_method(self, method): + def setup_method(self): self.factor = Categorical( ["a", "b", "b", "a", "a", "c", "c", "c"], ordered=True ) diff --git a/pandas/tests/arrays/categorical/test_indexing.py b/pandas/tests/arrays/categorical/test_indexing.py index 617d1861fa65a..26366178050cc 100644 --- a/pandas/tests/arrays/categorical/test_indexing.py +++ b/pandas/tests/arrays/categorical/test_indexing.py @@ -370,7 +370,7 @@ def array(self, dtype=None): yield -def test_series_at(non_coercible_categorical): +def test_series_at(): arr = Categorical(["a", "b", "c"]) ser = Series(arr) result = ser.at[0] diff --git a/pandas/tests/arrays/masked/test_arithmetic.py b/pandas/tests/arrays/masked/test_arithmetic.py index 6f6fc957d1303..379c339e0eab8 100644 --- a/pandas/tests/arrays/masked/test_arithmetic.py +++ b/pandas/tests/arrays/masked/test_arithmetic.py @@ -173,7 +173,7 @@ def test_error_len_mismatch(data, all_arithmetic_operators): @pytest.mark.parametrize("op", ["__neg__", "__abs__", "__invert__"]) -def test_unary_op_does_not_propagate_mask(data, op, request): +def test_unary_op_does_not_propagate_mask(data, op): # https://github.com/pandas-dev/pandas/issues/39943 data, _ = data ser = pd.Series(data) diff --git a/pandas/tests/arrays/sparse/test_accessor.py b/pandas/tests/arrays/sparse/test_accessor.py index e45dbb393a8de..36af5d32ae461 100644 --- a/pandas/tests/arrays/sparse/test_accessor.py +++ b/pandas/tests/arrays/sparse/test_accessor.py @@ -14,13 +14,90 @@ class TestSeriesAccessor: - # TODO: collect other Series accessor tests def test_to_dense(self): - s = pd.Series([0, 1, 0, 10], dtype="Sparse[int64]") - result = s.sparse.to_dense() + ser = pd.Series([0, 1, 0, 10], dtype="Sparse[int64]") + result = ser.sparse.to_dense() expected = pd.Series([0, 1, 0, 10]) tm.assert_series_equal(result, expected) + @pytest.mark.parametrize("attr", ["npoints", "density", "fill_value", "sp_values"]) + def test_get_attributes(self, attr): + arr = SparseArray([0, 1]) + ser = pd.Series(arr) + + result = getattr(ser.sparse, attr) + expected = getattr(arr, attr) + assert result == expected + + @td.skip_if_no_scipy + def test_from_coo(self): + import scipy.sparse + + row = [0, 3, 1, 0] + col = [0, 3, 1, 2] + data = [4, 5, 7, 9] + # TODO(scipy#13585): Remove dtype when scipy is fixed + # https://github.com/scipy/scipy/issues/13585 + sp_array = scipy.sparse.coo_matrix((data, (row, col)), dtype="int") + result = pd.Series.sparse.from_coo(sp_array) + + index = pd.MultiIndex.from_arrays([[0, 0, 1, 3], [0, 2, 1, 3]]) + expected = pd.Series([4, 9, 7, 5], index=index, dtype="Sparse[int]") + tm.assert_series_equal(result, expected) + + @td.skip_if_no_scipy + @pytest.mark.parametrize( + "sort_labels, expected_rows, expected_cols, expected_values_pos", + [ + ( + False, + [("b", 2), ("a", 2), ("b", 1), ("a", 1)], + [("z", 1), ("z", 2), ("x", 2), ("z", 0)], + {1: (1, 0), 3: (3, 3)}, + ), + ( + True, + [("a", 1), ("a", 2), ("b", 1), ("b", 2)], + [("x", 2), ("z", 0), ("z", 1), ("z", 2)], + {1: (1, 2), 3: (0, 1)}, + ), + ], + ) + def test_to_coo( + self, sort_labels, expected_rows, expected_cols, expected_values_pos + ): + import scipy.sparse + + values = SparseArray([0, np.nan, 1, 0, None, 3], fill_value=0) + index = pd.MultiIndex.from_tuples( + [ + ("b", 2, "z", 1), + ("a", 2, "z", 2), + ("a", 2, "z", 1), + ("a", 2, "x", 2), + ("b", 1, "z", 1), + ("a", 1, "z", 0), + ] + ) + ss = pd.Series(values, index=index) + + expected_A = np.zeros((4, 4)) + for value, (row, col) in expected_values_pos.items(): + expected_A[row, col] = value + + A, rows, cols = ss.sparse.to_coo( + row_levels=(0, 1), column_levels=(2, 3), sort_labels=sort_labels + ) + assert isinstance(A, scipy.sparse.coo_matrix) + tm.assert_numpy_array_equal(A.toarray(), expected_A) + assert rows == expected_rows + assert cols == expected_cols + + def test_non_sparse_raises(self): + ser = pd.Series([1, 2, 3]) + with pytest.raises(AttributeError, match=".sparse"): + ser.sparse.density + class TestFrameAccessor: def test_accessor_raises(self): diff --git a/pandas/tests/arrays/sparse/test_arithmetics.py b/pandas/tests/arrays/sparse/test_arithmetics.py index 3db1ee9faad78..8f975e942db93 100644 --- a/pandas/tests/arrays/sparse/test_arithmetics.py +++ b/pandas/tests/arrays/sparse/test_arithmetics.py @@ -27,10 +27,6 @@ def mix(request): class TestSparseArrayArithmetics: - - _base = np.array - _klass = SparseArray - def _assert(self, a, b): # We have to use tm.assert_sp_array_equal. See GH #45126 tm.assert_numpy_array_equal(a, b) @@ -54,7 +50,7 @@ def _check_numeric_ops(self, a, b, a_dense, b_dense, mix: bool, op): self._assert(result, expected) def _check_bool_result(self, res): - assert isinstance(res, self._klass) + assert isinstance(res, SparseArray) assert isinstance(res.dtype, SparseDtype) assert res.dtype.subtype == np.bool_ assert isinstance(res.fill_value, bool) @@ -133,25 +129,25 @@ def test_float_scalar( mark = pytest.mark.xfail(raises=AssertionError, reason="GH#38172") request.node.add_marker(mark) - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - a = self._klass(values, kind=kind, fill_value=fill_value) + a = SparseArray(values, kind=kind, fill_value=fill_value) self._check_numeric_ops(a, scalar, values, scalar, mix, op) def test_float_scalar_comparison(self, kind): - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - a = self._klass(values, kind=kind) + a = SparseArray(values, kind=kind) self._check_comparison_ops(a, 1, values, 1) self._check_comparison_ops(a, 0, values, 0) self._check_comparison_ops(a, 3, values, 3) - a = self._klass(values, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) self._check_comparison_ops(a, 1, values, 1) self._check_comparison_ops(a, 0, values, 0) self._check_comparison_ops(a, 3, values, 3) - a = self._klass(values, kind=kind, fill_value=2) + a = SparseArray(values, kind=kind, fill_value=2) self._check_comparison_ops(a, 1, values, 1) self._check_comparison_ops(a, 0, values, 0) self._check_comparison_ops(a, 3, values, 3) @@ -160,11 +156,11 @@ def test_float_same_index_without_nans(self, kind, mix, all_arithmetic_functions # when sp_index are the same op = all_arithmetic_functions - values = self._base([0.0, 1.0, 2.0, 6.0, 0.0, 0.0, 1.0, 2.0, 1.0, 0.0]) - rvalues = self._base([0.0, 2.0, 3.0, 4.0, 0.0, 0.0, 1.0, 3.0, 2.0, 0.0]) + values = np.array([0.0, 1.0, 2.0, 6.0, 0.0, 0.0, 1.0, 2.0, 1.0, 0.0]) + rvalues = np.array([0.0, 2.0, 3.0, 4.0, 0.0, 0.0, 1.0, 3.0, 2.0, 0.0]) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) self._check_numeric_ops(a, b, values, rvalues, mix, op) def test_float_same_index_with_nans( @@ -180,94 +176,94 @@ def test_float_same_index_with_nans( ): mark = pytest.mark.xfail(raises=AssertionError, reason="GH#38172") request.node.add_marker(mark) - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([np.nan, 2, 3, 4, np.nan, 0, 1, 3, 2, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([np.nan, 2, 3, 4, np.nan, 0, 1, 3, 2, np.nan]) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) self._check_numeric_ops(a, b, values, rvalues, mix, op) def test_float_same_index_comparison(self, kind): # when sp_index are the same - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([np.nan, 2, 3, 4, np.nan, 0, 1, 3, 2, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([np.nan, 2, 3, 4, np.nan, 0, 1, 3, 2, np.nan]) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) self._check_comparison_ops(a, b, values, rvalues) - values = self._base([0.0, 1.0, 2.0, 6.0, 0.0, 0.0, 1.0, 2.0, 1.0, 0.0]) - rvalues = self._base([0.0, 2.0, 3.0, 4.0, 0.0, 0.0, 1.0, 3.0, 2.0, 0.0]) + values = np.array([0.0, 1.0, 2.0, 6.0, 0.0, 0.0, 1.0, 2.0, 1.0, 0.0]) + rvalues = np.array([0.0, 2.0, 3.0, 4.0, 0.0, 0.0, 1.0, 3.0, 2.0, 0.0]) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) self._check_comparison_ops(a, b, values, rvalues) def test_float_array(self, kind, mix, all_arithmetic_functions): op = all_arithmetic_functions - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) self._check_numeric_ops(a, b, values, rvalues, mix, op) self._check_numeric_ops(a, b * 0, values, rvalues * 0, mix, op) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind=kind, fill_value=1) - b = self._klass(rvalues, kind=kind, fill_value=2) + a = SparseArray(values, kind=kind, fill_value=1) + b = SparseArray(rvalues, kind=kind, fill_value=2) self._check_numeric_ops(a, b, values, rvalues, mix, op) def test_float_array_different_kind(self, mix, all_arithmetic_functions): op = all_arithmetic_functions - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) - a = self._klass(values, kind="integer") - b = self._klass(rvalues, kind="block") + a = SparseArray(values, kind="integer") + b = SparseArray(rvalues, kind="block") self._check_numeric_ops(a, b, values, rvalues, mix, op) self._check_numeric_ops(a, b * 0, values, rvalues * 0, mix, op) - a = self._klass(values, kind="integer", fill_value=0) - b = self._klass(rvalues, kind="block") + a = SparseArray(values, kind="integer", fill_value=0) + b = SparseArray(rvalues, kind="block") self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind="integer", fill_value=0) - b = self._klass(rvalues, kind="block", fill_value=0) + a = SparseArray(values, kind="integer", fill_value=0) + b = SparseArray(rvalues, kind="block", fill_value=0) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind="integer", fill_value=1) - b = self._klass(rvalues, kind="block", fill_value=2) + a = SparseArray(values, kind="integer", fill_value=1) + b = SparseArray(rvalues, kind="block", fill_value=2) self._check_numeric_ops(a, b, values, rvalues, mix, op) def test_float_array_comparison(self, kind): - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([2, np.nan, 2, 3, np.nan, 0, 1, 5, 2, np.nan]) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) self._check_comparison_ops(a, b, values, rvalues) self._check_comparison_ops(a, b * 0, values, rvalues * 0) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, kind=kind, fill_value=1) - b = self._klass(rvalues, kind=kind, fill_value=2) + a = SparseArray(values, kind=kind, fill_value=1) + b = SparseArray(rvalues, kind=kind, fill_value=2) self._check_comparison_ops(a, b, values, rvalues) def test_int_array(self, kind, mix, all_arithmetic_functions): @@ -276,33 +272,33 @@ def test_int_array(self, kind, mix, all_arithmetic_functions): # have to specify dtype explicitly until fixing GH 667 dtype = np.int64 - values = self._base([0, 1, 2, 0, 0, 0, 1, 2, 1, 0], dtype=dtype) - rvalues = self._base([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=dtype) + values = np.array([0, 1, 2, 0, 0, 0, 1, 2, 1, 0], dtype=dtype) + rvalues = np.array([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=dtype) - a = self._klass(values, dtype=dtype, kind=kind) + a = SparseArray(values, dtype=dtype, kind=kind) assert a.dtype == SparseDtype(dtype) - b = self._klass(rvalues, dtype=dtype, kind=kind) + b = SparseArray(rvalues, dtype=dtype, kind=kind) assert b.dtype == SparseDtype(dtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) self._check_numeric_ops(a, b * 0, values, rvalues * 0, mix, op) - a = self._klass(values, fill_value=0, dtype=dtype, kind=kind) + a = SparseArray(values, fill_value=0, dtype=dtype, kind=kind) assert a.dtype == SparseDtype(dtype) - b = self._klass(rvalues, dtype=dtype, kind=kind) + b = SparseArray(rvalues, dtype=dtype, kind=kind) assert b.dtype == SparseDtype(dtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, fill_value=0, dtype=dtype, kind=kind) + a = SparseArray(values, fill_value=0, dtype=dtype, kind=kind) assert a.dtype == SparseDtype(dtype) - b = self._klass(rvalues, fill_value=0, dtype=dtype, kind=kind) + b = SparseArray(rvalues, fill_value=0, dtype=dtype, kind=kind) assert b.dtype == SparseDtype(dtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, fill_value=1, dtype=dtype, kind=kind) + a = SparseArray(values, fill_value=1, dtype=dtype, kind=kind) assert a.dtype == SparseDtype(dtype, fill_value=1) - b = self._klass(rvalues, fill_value=2, dtype=dtype, kind=kind) + b = SparseArray(rvalues, fill_value=2, dtype=dtype, kind=kind) assert b.dtype == SparseDtype(dtype, fill_value=2) self._check_numeric_ops(a, b, values, rvalues, mix, op) @@ -310,46 +306,46 @@ def test_int_array_comparison(self, kind): dtype = "int64" # int32 NI ATM - values = self._base([0, 1, 2, 0, 0, 0, 1, 2, 1, 0], dtype=dtype) - rvalues = self._base([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=dtype) + values = np.array([0, 1, 2, 0, 0, 0, 1, 2, 1, 0], dtype=dtype) + rvalues = np.array([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=dtype) - a = self._klass(values, dtype=dtype, kind=kind) - b = self._klass(rvalues, dtype=dtype, kind=kind) + a = SparseArray(values, dtype=dtype, kind=kind) + b = SparseArray(rvalues, dtype=dtype, kind=kind) self._check_comparison_ops(a, b, values, rvalues) self._check_comparison_ops(a, b * 0, values, rvalues * 0) - a = self._klass(values, dtype=dtype, kind=kind, fill_value=0) - b = self._klass(rvalues, dtype=dtype, kind=kind) + a = SparseArray(values, dtype=dtype, kind=kind, fill_value=0) + b = SparseArray(rvalues, dtype=dtype, kind=kind) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, dtype=dtype, kind=kind, fill_value=0) - b = self._klass(rvalues, dtype=dtype, kind=kind, fill_value=0) + a = SparseArray(values, dtype=dtype, kind=kind, fill_value=0) + b = SparseArray(rvalues, dtype=dtype, kind=kind, fill_value=0) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, dtype=dtype, kind=kind, fill_value=1) - b = self._klass(rvalues, dtype=dtype, kind=kind, fill_value=2) + a = SparseArray(values, dtype=dtype, kind=kind, fill_value=1) + b = SparseArray(rvalues, dtype=dtype, kind=kind, fill_value=2) self._check_comparison_ops(a, b, values, rvalues) @pytest.mark.parametrize("fill_value", [True, False, np.nan]) def test_bool_same_index(self, kind, fill_value): # GH 14000 # when sp_index are the same - values = self._base([True, False, True, True], dtype=np.bool_) - rvalues = self._base([True, False, True, True], dtype=np.bool_) + values = np.array([True, False, True, True], dtype=np.bool_) + rvalues = np.array([True, False, True, True], dtype=np.bool_) - a = self._klass(values, kind=kind, dtype=np.bool_, fill_value=fill_value) - b = self._klass(rvalues, kind=kind, dtype=np.bool_, fill_value=fill_value) + a = SparseArray(values, kind=kind, dtype=np.bool_, fill_value=fill_value) + b = SparseArray(rvalues, kind=kind, dtype=np.bool_, fill_value=fill_value) self._check_logical_ops(a, b, values, rvalues) @pytest.mark.parametrize("fill_value", [True, False, np.nan]) def test_bool_array_logical(self, kind, fill_value): # GH 14000 # when sp_index are the same - values = self._base([True, False, True, False, True, True], dtype=np.bool_) - rvalues = self._base([True, False, False, True, False, True], dtype=np.bool_) + values = np.array([True, False, True, False, True, True], dtype=np.bool_) + rvalues = np.array([True, False, False, True, False, True], dtype=np.bool_) - a = self._klass(values, kind=kind, dtype=np.bool_, fill_value=fill_value) - b = self._klass(rvalues, kind=kind, dtype=np.bool_, fill_value=fill_value) + a = SparseArray(values, kind=kind, dtype=np.bool_, fill_value=fill_value) + b = SparseArray(rvalues, kind=kind, dtype=np.bool_, fill_value=fill_value) self._check_logical_ops(a, b, values, rvalues) def test_mixed_array_float_int(self, kind, mix, all_arithmetic_functions, request): @@ -361,28 +357,28 @@ def test_mixed_array_float_int(self, kind, mix, all_arithmetic_functions, reques rdtype = "int64" - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=rdtype) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=rdtype) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) assert b.dtype == SparseDtype(rdtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) self._check_numeric_ops(a, b * 0, values, rvalues * 0, mix, op) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind) assert b.dtype == SparseDtype(rdtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) assert b.dtype == SparseDtype(rdtype) self._check_numeric_ops(a, b, values, rvalues, mix, op) - a = self._klass(values, kind=kind, fill_value=1) - b = self._klass(rvalues, kind=kind, fill_value=2) + a = SparseArray(values, kind=kind, fill_value=1) + b = SparseArray(rvalues, kind=kind, fill_value=2) assert b.dtype == SparseDtype(rdtype, fill_value=2) self._check_numeric_ops(a, b, values, rvalues, mix, op) @@ -390,28 +386,28 @@ def test_mixed_array_comparison(self, kind): rdtype = "int64" # int32 NI ATM - values = self._base([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) - rvalues = self._base([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=rdtype) + values = np.array([np.nan, 1, 2, 0, np.nan, 0, 1, 2, 1, np.nan]) + rvalues = np.array([2, 0, 2, 3, 0, 0, 1, 5, 2, 0], dtype=rdtype) - a = self._klass(values, kind=kind) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind) + b = SparseArray(rvalues, kind=kind) assert b.dtype == SparseDtype(rdtype) self._check_comparison_ops(a, b, values, rvalues) self._check_comparison_ops(a, b * 0, values, rvalues * 0) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind) assert b.dtype == SparseDtype(rdtype) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, kind=kind, fill_value=0) - b = self._klass(rvalues, kind=kind, fill_value=0) + a = SparseArray(values, kind=kind, fill_value=0) + b = SparseArray(rvalues, kind=kind, fill_value=0) assert b.dtype == SparseDtype(rdtype) self._check_comparison_ops(a, b, values, rvalues) - a = self._klass(values, kind=kind, fill_value=1) - b = self._klass(rvalues, kind=kind, fill_value=2) + a = SparseArray(values, kind=kind, fill_value=1) + b = SparseArray(rvalues, kind=kind, fill_value=2) assert b.dtype == SparseDtype(rdtype, fill_value=2) self._check_comparison_ops(a, b, values, rvalues) @@ -495,36 +491,60 @@ def test_sparray_inplace(): tm.assert_sp_array_equal(sparray, expected) -@pytest.mark.parametrize("fill_value", [True, False]) -def test_invert(fill_value): - arr = np.array([True, False, False, True]) - sparray = SparseArray(arr, fill_value=fill_value) - result = ~sparray - expected = SparseArray(~arr, fill_value=not fill_value) - tm.assert_sp_array_equal(result, expected) - - result = ~pd.Series(sparray) - expected = pd.Series(expected) - tm.assert_series_equal(result, expected) - - result = ~pd.DataFrame({"A": sparray}) - expected = pd.DataFrame({"A": expected}) - tm.assert_frame_equal(result, expected) - - -@pytest.mark.parametrize("fill_value", [0, np.nan]) -@pytest.mark.parametrize("op", [operator.pos, operator.neg]) -def test_unary_op(op, fill_value): - arr = np.array([0, 1, np.nan, 2]) - sparray = SparseArray(arr, fill_value=fill_value) - result = op(sparray) - expected = SparseArray(op(arr), fill_value=op(fill_value)) - tm.assert_sp_array_equal(result, expected) - - @pytest.mark.parametrize("cons", [list, np.array, SparseArray]) def test_mismatched_length_cmp_op(cons): left = SparseArray([True, True]) right = cons([True, True, True]) with pytest.raises(ValueError, match="operands have mismatched length"): left & right + + +@pytest.mark.parametrize("op", ["add", "sub", "mul", "truediv", "floordiv", "pow"]) +def test_binary_operators(op): + op = getattr(operator, op) + data1 = np.random.randn(20) + data2 = np.random.randn(20) + + data1[::2] = np.nan + data2[::3] = np.nan + + arr1 = SparseArray(data1) + arr2 = SparseArray(data2) + + data1[::2] = 3 + data2[::3] = 3 + farr1 = SparseArray(data1, fill_value=3) + farr2 = SparseArray(data2, fill_value=3) + + def _check_op(op, first, second): + res = op(first, second) + exp = SparseArray( + op(first.to_dense(), second.to_dense()), fill_value=first.fill_value + ) + assert isinstance(res, SparseArray) + tm.assert_almost_equal(res.to_dense(), exp.to_dense()) + + res2 = op(first, second.to_dense()) + assert isinstance(res2, SparseArray) + tm.assert_sp_array_equal(res, res2) + + res3 = op(first.to_dense(), second) + assert isinstance(res3, SparseArray) + tm.assert_sp_array_equal(res, res3) + + res4 = op(first, 4) + assert isinstance(res4, SparseArray) + + # Ignore this if the actual op raises (e.g. pow). + try: + exp = op(first.to_dense(), 4) + exp_fv = op(first.fill_value, 4) + except ValueError: + pass + else: + tm.assert_almost_equal(res4.fill_value, exp_fv) + tm.assert_almost_equal(res4.to_dense(), exp) + + with np.errstate(all="ignore"): + for first_arr, second_arr in [(arr1, arr2), (farr1, farr2)]: + _check_op(op, first_arr, second_arr) diff --git a/pandas/tests/arrays/sparse/test_array.py b/pandas/tests/arrays/sparse/test_array.py index a8517535e7833..0e734f0c1a1e8 100644 --- a/pandas/tests/arrays/sparse/test_array.py +++ b/pandas/tests/arrays/sparse/test_array.py @@ -1,4 +1,3 @@ -import operator import re import warnings @@ -6,7 +5,6 @@ import pytest from pandas._libs.sparse import IntIndex -import pandas.util._test_decorators as td import pandas as pd from pandas import isna @@ -19,314 +17,11 @@ class TestSparseArray: - def setup_method(self, method): + def setup_method(self): self.arr_data = np.array([np.nan, np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 6]) self.arr = SparseArray(self.arr_data) self.zarr = SparseArray([0, 0, 1, 2, 3, 0, 4, 5, 0, 6], fill_value=0) - def test_constructor_dtype(self): - arr = SparseArray([np.nan, 1, 2, np.nan]) - assert arr.dtype == SparseDtype(np.float64, np.nan) - assert arr.dtype.subtype == np.float64 - assert np.isnan(arr.fill_value) - - arr = SparseArray([np.nan, 1, 2, np.nan], fill_value=0) - assert arr.dtype == SparseDtype(np.float64, 0) - assert arr.fill_value == 0 - - arr = SparseArray([0, 1, 2, 4], dtype=np.float64) - assert arr.dtype == SparseDtype(np.float64, np.nan) - assert np.isnan(arr.fill_value) - - arr = SparseArray([0, 1, 2, 4], dtype=np.int64) - assert arr.dtype == SparseDtype(np.int64, 0) - assert arr.fill_value == 0 - - arr = SparseArray([0, 1, 2, 4], fill_value=0, dtype=np.int64) - assert arr.dtype == SparseDtype(np.int64, 0) - assert arr.fill_value == 0 - - arr = SparseArray([0, 1, 2, 4], dtype=None) - assert arr.dtype == SparseDtype(np.int64, 0) - assert arr.fill_value == 0 - - arr = SparseArray([0, 1, 2, 4], fill_value=0, dtype=None) - assert arr.dtype == SparseDtype(np.int64, 0) - assert arr.fill_value == 0 - - def test_constructor_dtype_str(self): - result = SparseArray([1, 2, 3], dtype="int") - expected = SparseArray([1, 2, 3], dtype=int) - tm.assert_sp_array_equal(result, expected) - - def test_constructor_sparse_dtype(self): - result = SparseArray([1, 0, 0, 1], dtype=SparseDtype("int64", -1)) - expected = SparseArray([1, 0, 0, 1], fill_value=-1, dtype=np.int64) - tm.assert_sp_array_equal(result, expected) - assert result.sp_values.dtype == np.dtype("int64") - - def test_constructor_sparse_dtype_str(self): - result = SparseArray([1, 0, 0, 1], dtype="Sparse[int32]") - expected = SparseArray([1, 0, 0, 1], dtype=np.int32) - tm.assert_sp_array_equal(result, expected) - assert result.sp_values.dtype == np.dtype("int32") - - def test_constructor_object_dtype(self): - # GH 11856 - arr = SparseArray(["A", "A", np.nan, "B"], dtype=object) - assert arr.dtype == SparseDtype(object) - assert np.isnan(arr.fill_value) - - arr = SparseArray(["A", "A", np.nan, "B"], dtype=object, fill_value="A") - assert arr.dtype == SparseDtype(object, "A") - assert arr.fill_value == "A" - - # GH 17574 - data = [False, 0, 100.0, 0.0] - arr = SparseArray(data, dtype=object, fill_value=False) - assert arr.dtype == SparseDtype(object, False) - assert arr.fill_value is False - arr_expected = np.array(data, dtype=object) - it = (type(x) == type(y) and x == y for x, y in zip(arr, arr_expected)) - assert np.fromiter(it, dtype=np.bool_).all() - - @pytest.mark.parametrize("dtype", [SparseDtype(int, 0), int]) - def test_constructor_na_dtype(self, dtype): - with pytest.raises(ValueError, match="Cannot convert"): - SparseArray([0, 1, np.nan], dtype=dtype) - - def test_constructor_warns_when_losing_timezone(self): - # GH#32501 warn when losing timezone information - dti = pd.date_range("2016-01-01", periods=3, tz="US/Pacific") - - expected = SparseArray(np.asarray(dti, dtype="datetime64[ns]")) - - with tm.assert_produces_warning(UserWarning): - result = SparseArray(dti) - - tm.assert_sp_array_equal(result, expected) - - with tm.assert_produces_warning(UserWarning): - result = SparseArray(pd.Series(dti)) - - tm.assert_sp_array_equal(result, expected) - - def test_constructor_spindex_dtype(self): - arr = SparseArray(data=[1, 2], sparse_index=IntIndex(4, [1, 2])) - # XXX: Behavior change: specifying SparseIndex no longer changes the - # fill_value - expected = SparseArray([0, 1, 2, 0], kind="integer") - tm.assert_sp_array_equal(arr, expected) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - arr = SparseArray( - data=[1, 2, 3], - sparse_index=IntIndex(4, [1, 2, 3]), - dtype=np.int64, - fill_value=0, - ) - exp = SparseArray([0, 1, 2, 3], dtype=np.int64, fill_value=0) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - arr = SparseArray( - data=[1, 2], sparse_index=IntIndex(4, [1, 2]), fill_value=0, dtype=np.int64 - ) - exp = SparseArray([0, 1, 2, 0], fill_value=0, dtype=np.int64) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - arr = SparseArray( - data=[1, 2, 3], - sparse_index=IntIndex(4, [1, 2, 3]), - dtype=None, - fill_value=0, - ) - exp = SparseArray([0, 1, 2, 3], dtype=None) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - @pytest.mark.parametrize("sparse_index", [None, IntIndex(1, [0])]) - def test_constructor_spindex_dtype_scalar(self, sparse_index): - # scalar input - arr = SparseArray(data=1, sparse_index=sparse_index, dtype=None) - exp = SparseArray([1], dtype=None) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - arr = SparseArray(data=1, sparse_index=IntIndex(1, [0]), dtype=None) - exp = SparseArray([1], dtype=None) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - def test_constructor_spindex_dtype_scalar_broadcasts(self): - arr = SparseArray( - data=[1, 2], sparse_index=IntIndex(4, [1, 2]), fill_value=0, dtype=None - ) - exp = SparseArray([0, 1, 2, 0], fill_value=0, dtype=None) - tm.assert_sp_array_equal(arr, exp) - assert arr.dtype == SparseDtype(np.int64) - assert arr.fill_value == 0 - - @pytest.mark.parametrize( - "data, fill_value", - [ - (np.array([1, 2]), 0), - (np.array([1.0, 2.0]), np.nan), - ([True, False], False), - ([pd.Timestamp("2017-01-01")], pd.NaT), - ], - ) - def test_constructor_inferred_fill_value(self, data, fill_value): - result = SparseArray(data).fill_value - - if isna(fill_value): - assert isna(result) - else: - assert result == fill_value - - @pytest.mark.parametrize("format", ["coo", "csc", "csr"]) - @pytest.mark.parametrize("size", [0, 10]) - @td.skip_if_no_scipy - def test_from_spmatrix(self, size, format): - import scipy.sparse - - mat = scipy.sparse.random(size, 1, density=0.5, format=format) - result = SparseArray.from_spmatrix(mat) - - result = np.asarray(result) - expected = mat.toarray().ravel() - tm.assert_numpy_array_equal(result, expected) - - @pytest.mark.parametrize("format", ["coo", "csc", "csr"]) - @td.skip_if_no_scipy - def test_from_spmatrix_including_explicit_zero(self, format): - import scipy.sparse - - mat = scipy.sparse.random(10, 1, density=0.5, format=format) - mat.data[0] = 0 - result = SparseArray.from_spmatrix(mat) - - result = np.asarray(result) - expected = mat.toarray().ravel() - tm.assert_numpy_array_equal(result, expected) - - @td.skip_if_no_scipy - def test_from_spmatrix_raises(self): - import scipy.sparse - - mat = scipy.sparse.eye(5, 4, format="csc") - - with pytest.raises(ValueError, match="not '4'"): - SparseArray.from_spmatrix(mat) - - @pytest.mark.parametrize( - "scalar,dtype", - [ - (False, SparseDtype(bool, False)), - (0.0, SparseDtype("float64", 0)), - (1, SparseDtype("int64", 1)), - ("z", SparseDtype("object", "z")), - ], - ) - def test_scalar_with_index_infer_dtype(self, scalar, dtype): - # GH 19163 - with tm.assert_produces_warning( - FutureWarning, match="The index argument has been deprecated" - ): - arr = SparseArray(scalar, index=[1, 2, 3], fill_value=scalar) - exp = SparseArray([scalar, scalar, scalar], fill_value=scalar) - - tm.assert_sp_array_equal(arr, exp) - - assert arr.dtype == dtype - assert exp.dtype == dtype - - def test_getitem_bool_sparse_array(self): - # GH 23122 - spar_bool = SparseArray([False, True] * 5, dtype=np.bool8, fill_value=True) - exp = SparseArray([np.nan, 2, np.nan, 5, 6]) - tm.assert_sp_array_equal(self.arr[spar_bool], exp) - - spar_bool = ~spar_bool - res = self.arr[spar_bool] - exp = SparseArray([np.nan, 1, 3, 4, np.nan]) - tm.assert_sp_array_equal(res, exp) - - spar_bool = SparseArray( - [False, True, np.nan] * 3, dtype=np.bool8, fill_value=np.nan - ) - res = self.arr[spar_bool] - exp = SparseArray([np.nan, 3, 5]) - tm.assert_sp_array_equal(res, exp) - - def test_getitem_bool_sparse_array_as_comparison(self): - # GH 45110 - arr = SparseArray([1, 2, 3, 4, np.nan, np.nan], fill_value=np.nan) - res = arr[arr > 2] - exp = SparseArray([3.0, 4.0], fill_value=np.nan) - tm.assert_sp_array_equal(res, exp) - - def test_get_item(self): - - assert np.isnan(self.arr[1]) - assert self.arr[2] == 1 - assert self.arr[7] == 5 - - assert self.zarr[0] == 0 - assert self.zarr[2] == 1 - assert self.zarr[7] == 5 - - errmsg = "must be an integer between -10 and 10" - - with pytest.raises(IndexError, match=errmsg): - self.arr[11] - - with pytest.raises(IndexError, match=errmsg): - self.arr[-11] - - assert self.arr[-1] == self.arr[len(self.arr) - 1] - - def test_take_scalar_raises(self): - msg = "'indices' must be an array, not a scalar '2'." - with pytest.raises(ValueError, match=msg): - self.arr.take(2) - - def test_take(self): - exp = SparseArray(np.take(self.arr_data, [2, 3])) - tm.assert_sp_array_equal(self.arr.take([2, 3]), exp) - - exp = SparseArray(np.take(self.arr_data, [0, 1, 2])) - tm.assert_sp_array_equal(self.arr.take([0, 1, 2]), exp) - - def test_take_all_empty(self): - a = pd.array([0, 0], dtype=SparseDtype("int64")) - result = a.take([0, 1], allow_fill=True, fill_value=np.nan) - tm.assert_sp_array_equal(a, result) - - def test_take_fill_value(self): - data = np.array([1, np.nan, 0, 3, 0]) - sparse = SparseArray(data, fill_value=0) - - exp = SparseArray(np.take(data, [0]), fill_value=0) - tm.assert_sp_array_equal(sparse.take([0]), exp) - - exp = SparseArray(np.take(data, [1, 3, 4]), fill_value=0) - tm.assert_sp_array_equal(sparse.take([1, 3, 4]), exp) - - def test_take_negative(self): - exp = SparseArray(np.take(self.arr_data, [-1])) - tm.assert_sp_array_equal(self.arr.take([-1]), exp) - - exp = SparseArray(np.take(self.arr_data, [-4, -3, -2])) - tm.assert_sp_array_equal(self.arr.take([-4, -3, -2]), exp) - @pytest.mark.parametrize("fill_value", [0, None, np.nan]) def test_shift_fill_value(self, fill_value): # GH #24128 @@ -337,287 +32,6 @@ def test_shift_fill_value(self, fill_value): exp = SparseArray(np.array([fill_value, 1, 0, 0, 3]), fill_value=8.0) tm.assert_sp_array_equal(res, exp) - def test_bad_take(self): - with pytest.raises(IndexError, match="bounds"): - self.arr.take([11]) - - def test_take_filling(self): - # similar tests as GH 12631 - sparse = SparseArray([np.nan, np.nan, 1, np.nan, 4]) - result = sparse.take(np.array([1, 0, -1])) - expected = SparseArray([np.nan, np.nan, 4]) - tm.assert_sp_array_equal(result, expected) - - # XXX: test change: fill_value=True -> allow_fill=True - result = sparse.take(np.array([1, 0, -1]), allow_fill=True) - expected = SparseArray([np.nan, np.nan, np.nan]) - tm.assert_sp_array_equal(result, expected) - - # allow_fill=False - result = sparse.take(np.array([1, 0, -1]), allow_fill=False, fill_value=True) - expected = SparseArray([np.nan, np.nan, 4]) - tm.assert_sp_array_equal(result, expected) - - msg = "Invalid value in 'indices'" - with pytest.raises(ValueError, match=msg): - sparse.take(np.array([1, 0, -2]), allow_fill=True) - - with pytest.raises(ValueError, match=msg): - sparse.take(np.array([1, 0, -5]), allow_fill=True) - - msg = "out of bounds value in 'indices'" - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, -6])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5]), allow_fill=True) - - def test_take_filling_fill_value(self): - # same tests as GH 12631 - sparse = SparseArray([np.nan, 0, 1, 0, 4], fill_value=0) - result = sparse.take(np.array([1, 0, -1])) - expected = SparseArray([0, np.nan, 4], fill_value=0) - tm.assert_sp_array_equal(result, expected) - - # fill_value - result = sparse.take(np.array([1, 0, -1]), allow_fill=True) - # XXX: behavior change. - # the old way of filling self.fill_value doesn't follow EA rules. - # It's supposed to be self.dtype.na_value (nan in this case) - expected = SparseArray([0, np.nan, np.nan], fill_value=0) - tm.assert_sp_array_equal(result, expected) - - # allow_fill=False - result = sparse.take(np.array([1, 0, -1]), allow_fill=False, fill_value=True) - expected = SparseArray([0, np.nan, 4], fill_value=0) - tm.assert_sp_array_equal(result, expected) - - msg = "Invalid value in 'indices'." - with pytest.raises(ValueError, match=msg): - sparse.take(np.array([1, 0, -2]), allow_fill=True) - with pytest.raises(ValueError, match=msg): - sparse.take(np.array([1, 0, -5]), allow_fill=True) - - msg = "out of bounds value in 'indices'" - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, -6])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5]), fill_value=True) - - @pytest.mark.parametrize("kind", ["block", "integer"]) - def test_take_filling_all_nan(self, kind): - sparse = SparseArray([np.nan, np.nan, np.nan, np.nan, np.nan], kind=kind) - result = sparse.take(np.array([1, 0, -1])) - expected = SparseArray([np.nan, np.nan, np.nan], kind=kind) - tm.assert_sp_array_equal(result, expected) - - result = sparse.take(np.array([1, 0, -1]), fill_value=True) - expected = SparseArray([np.nan, np.nan, np.nan], kind=kind) - tm.assert_sp_array_equal(result, expected) - - msg = "out of bounds value in 'indices'" - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, -6])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5])) - with pytest.raises(IndexError, match=msg): - sparse.take(np.array([1, 5]), fill_value=True) - - def test_set_item(self): - def setitem(): - self.arr[5] = 3 - - def setslice(): - self.arr[1:5] = 2 - - with pytest.raises(TypeError, match="assignment via setitem"): - setitem() - - with pytest.raises(TypeError, match="assignment via setitem"): - setslice() - - def test_constructor_from_too_large_array(self): - with pytest.raises(TypeError, match="expected dimension <= 1 data"): - SparseArray(np.arange(10).reshape((2, 5))) - - def test_constructor_from_sparse(self): - res = SparseArray(self.zarr) - assert res.fill_value == 0 - tm.assert_almost_equal(res.sp_values, self.zarr.sp_values) - - def test_constructor_copy(self): - cp = SparseArray(self.arr, copy=True) - cp.sp_values[:3] = 0 - assert not (self.arr.sp_values[:3] == 0).any() - - not_copy = SparseArray(self.arr) - not_copy.sp_values[:3] = 0 - assert (self.arr.sp_values[:3] == 0).all() - - def test_constructor_bool(self): - # GH 10648 - data = np.array([False, False, True, True, False, False]) - arr = SparseArray(data, fill_value=False, dtype=bool) - - assert arr.dtype == SparseDtype(bool) - tm.assert_numpy_array_equal(arr.sp_values, np.array([True, True])) - # Behavior change: np.asarray densifies. - # tm.assert_numpy_array_equal(arr.sp_values, np.asarray(arr)) - tm.assert_numpy_array_equal(arr.sp_index.indices, np.array([2, 3], np.int32)) - - dense = arr.to_dense() - assert dense.dtype == bool - tm.assert_numpy_array_equal(dense, data) - - def test_constructor_bool_fill_value(self): - arr = SparseArray([True, False, True], dtype=None) - assert arr.dtype == SparseDtype(np.bool_) - assert not arr.fill_value - - arr = SparseArray([True, False, True], dtype=np.bool_) - assert arr.dtype == SparseDtype(np.bool_) - assert not arr.fill_value - - arr = SparseArray([True, False, True], dtype=np.bool_, fill_value=True) - assert arr.dtype == SparseDtype(np.bool_, True) - assert arr.fill_value - - def test_constructor_float32(self): - # GH 10648 - data = np.array([1.0, np.nan, 3], dtype=np.float32) - arr = SparseArray(data, dtype=np.float32) - - assert arr.dtype == SparseDtype(np.float32) - tm.assert_numpy_array_equal(arr.sp_values, np.array([1, 3], dtype=np.float32)) - # Behavior change: np.asarray densifies. - # tm.assert_numpy_array_equal(arr.sp_values, np.asarray(arr)) - tm.assert_numpy_array_equal( - arr.sp_index.indices, np.array([0, 2], dtype=np.int32) - ) - - dense = arr.to_dense() - assert dense.dtype == np.float32 - tm.assert_numpy_array_equal(dense, data) - - def test_astype(self): - # float -> float - arr = SparseArray([None, None, 0, 2]) - result = arr.astype("Sparse[float32]") - expected = SparseArray([None, None, 0, 2], dtype=np.dtype("float32")) - tm.assert_sp_array_equal(result, expected) - - dtype = SparseDtype("float64", fill_value=0) - result = arr.astype(dtype) - expected = SparseArray._simple_new( - np.array([0.0, 2.0], dtype=dtype.subtype), IntIndex(4, [2, 3]), dtype - ) - tm.assert_sp_array_equal(result, expected) - - dtype = SparseDtype("int64", 0) - result = arr.astype(dtype) - expected = SparseArray._simple_new( - np.array([0, 2], dtype=np.int64), IntIndex(4, [2, 3]), dtype - ) - tm.assert_sp_array_equal(result, expected) - - arr = SparseArray([0, np.nan, 0, 1], fill_value=0) - with pytest.raises(ValueError, match="NA"): - arr.astype("Sparse[i8]") - - def test_astype_bool(self): - a = SparseArray([1, 0, 0, 1], dtype=SparseDtype(int, 0)) - with tm.assert_produces_warning(FutureWarning, match="astype from Sparse"): - result = a.astype(bool) - expected = SparseArray( - [True, False, False, True], dtype=SparseDtype(bool, False) - ) - tm.assert_sp_array_equal(result, expected) - - # update fill value - result = a.astype(SparseDtype(bool, False)) - expected = SparseArray( - [True, False, False, True], dtype=SparseDtype(bool, False) - ) - tm.assert_sp_array_equal(result, expected) - - def test_astype_all(self, any_real_numpy_dtype): - vals = np.array([1, 2, 3]) - arr = SparseArray(vals, fill_value=1) - typ = np.dtype(any_real_numpy_dtype) - with tm.assert_produces_warning(FutureWarning, match="astype from Sparse"): - res = arr.astype(typ) - assert res.dtype == SparseDtype(typ, 1) - assert res.sp_values.dtype == typ - - tm.assert_numpy_array_equal(np.asarray(res.to_dense()), vals.astype(typ)) - - @pytest.mark.parametrize( - "arr, dtype, expected", - [ - ( - SparseArray([0, 1]), - "float", - SparseArray([0.0, 1.0], dtype=SparseDtype(float, 0.0)), - ), - (SparseArray([0, 1]), bool, SparseArray([False, True])), - ( - SparseArray([0, 1], fill_value=1), - bool, - SparseArray([False, True], dtype=SparseDtype(bool, True)), - ), - pytest.param( - SparseArray([0, 1]), - "datetime64[ns]", - SparseArray( - np.array([0, 1], dtype="datetime64[ns]"), - dtype=SparseDtype("datetime64[ns]", pd.Timestamp("1970")), - ), - marks=[pytest.mark.xfail(reason="NumPy-7619")], - ), - ( - SparseArray([0, 1, 10]), - str, - SparseArray(["0", "1", "10"], dtype=SparseDtype(str, "0")), - ), - (SparseArray(["10", "20"]), float, SparseArray([10.0, 20.0])), - ( - SparseArray([0, 1, 0]), - object, - SparseArray([0, 1, 0], dtype=SparseDtype(object, 0)), - ), - ], - ) - def test_astype_more(self, arr, dtype, expected): - - if isinstance(dtype, SparseDtype): - warn = None - else: - warn = FutureWarning - - with tm.assert_produces_warning(warn, match="astype from SparseDtype"): - result = arr.astype(dtype) - tm.assert_sp_array_equal(result, expected) - - def test_astype_nan_raises(self): - arr = SparseArray([1.0, np.nan]) - with pytest.raises(ValueError, match="Cannot convert non-finite"): - msg = "astype from SparseDtype" - with tm.assert_produces_warning(FutureWarning, match=msg): - arr.astype(int) - - def test_astype_copy_false(self): - # GH#34456 bug caused by using .view instead of .astype in astype_nansafe - arr = SparseArray([1, 2, 3]) - - dtype = SparseDtype(float, 0) - - result = arr.astype(dtype, copy=False) - expected = SparseArray([1.0, 2.0, 3.0], fill_value=0.0) - tm.assert_sp_array_equal(result, expected) - def test_set_fill_value(self): arr = SparseArray([1.0, np.nan, 2.0], fill_value=np.nan) arr.fill_value = 2 @@ -627,7 +41,7 @@ def test_set_fill_value(self): arr.fill_value = 2 assert arr.fill_value == 2 - # XXX: this seems fine? You can construct an integer + # TODO: this seems fine? You can construct an integer # sparsearray with NaN fill value, why not update one? # coerces to int # msg = "unable to set fill_value 3\\.1 to int64 dtype" @@ -644,8 +58,9 @@ def test_set_fill_value(self): arr.fill_value = True assert arr.fill_value + # FIXME: don't leave commented-out # coerces to bool - # XXX: we can construct an sparse array of bool + # TODO: we can construct an sparse array of bool # type and use as fill_value any value # msg = "fill_value must be True, False or nan" # with pytest.raises(ValueError, match=msg): @@ -706,163 +121,6 @@ def test_dense_repr(self, vals, fill_value): tm.assert_numpy_array_equal(res2, vals) - def test_getitem(self): - def _checkit(i): - tm.assert_almost_equal(self.arr[i], self.arr.to_dense()[i]) - - for i in range(len(self.arr)): - _checkit(i) - _checkit(-i) - - def test_getitem_arraylike_mask(self): - arr = SparseArray([0, 1, 2]) - result = arr[[True, False, True]] - expected = SparseArray([0, 2]) - tm.assert_sp_array_equal(result, expected) - - @pytest.mark.parametrize( - "slc", - [ - np.s_[:], - np.s_[1:10], - np.s_[1:100], - np.s_[10:1], - np.s_[:-3], - np.s_[-5:-4], - np.s_[:-12], - np.s_[-12:], - np.s_[2:], - np.s_[2::3], - np.s_[::2], - np.s_[::-1], - np.s_[::-2], - np.s_[1:6:2], - np.s_[:-6:-2], - ], - ) - @pytest.mark.parametrize( - "as_dense", [[np.nan] * 10, [1] * 10, [np.nan] * 5 + [1] * 5, []] - ) - def test_getslice(self, slc, as_dense): - as_dense = np.array(as_dense) - arr = SparseArray(as_dense) - - result = arr[slc] - expected = SparseArray(as_dense[slc]) - - tm.assert_sp_array_equal(result, expected) - - def test_getslice_tuple(self): - dense = np.array([np.nan, 0, 3, 4, 0, 5, np.nan, np.nan, 0]) - - sparse = SparseArray(dense) - res = sparse[(slice(4, None),)] - exp = SparseArray(dense[4:]) - tm.assert_sp_array_equal(res, exp) - - sparse = SparseArray(dense, fill_value=0) - res = sparse[(slice(4, None),)] - exp = SparseArray(dense[4:], fill_value=0) - tm.assert_sp_array_equal(res, exp) - - msg = "too many indices for array" - with pytest.raises(IndexError, match=msg): - sparse[4:, :] - - with pytest.raises(IndexError, match=msg): - # check numpy compat - dense[4:, :] - - def test_boolean_slice_empty(self): - arr = SparseArray([0, 1, 2]) - res = arr[[False, False, False]] - assert res.dtype == arr.dtype - - def test_neg_operator(self): - arr = SparseArray([-1, -2, np.nan, 3], fill_value=np.nan, dtype=np.int8) - res = -arr - exp = SparseArray([1, 2, np.nan, -3], fill_value=np.nan, dtype=np.int8) - tm.assert_sp_array_equal(exp, res) - - arr = SparseArray([-1, -2, 1, 3], fill_value=-1, dtype=np.int8) - res = -arr - exp = SparseArray([1, 2, -1, -3], fill_value=1, dtype=np.int8) - tm.assert_sp_array_equal(exp, res) - - def test_abs_operator(self): - arr = SparseArray([-1, -2, np.nan, 3], fill_value=np.nan, dtype=np.int8) - res = abs(arr) - exp = SparseArray([1, 2, np.nan, 3], fill_value=np.nan, dtype=np.int8) - tm.assert_sp_array_equal(exp, res) - - arr = SparseArray([-1, -2, 1, 3], fill_value=-1, dtype=np.int8) - res = abs(arr) - exp = SparseArray([1, 2, 1, 3], fill_value=1, dtype=np.int8) - tm.assert_sp_array_equal(exp, res) - - def test_invert_operator(self): - arr = SparseArray([False, True, False, True], fill_value=False, dtype=np.bool8) - res = ~arr - exp = SparseArray( - np.invert([False, True, False, True]), fill_value=True, dtype=np.bool8 - ) - res = ~arr - tm.assert_sp_array_equal(exp, res) - - arr = SparseArray([0, 1, 0, 2, 3, 0], fill_value=0, dtype=np.int32) - res = ~arr - exp = SparseArray([-1, -2, -1, -3, -4, -1], fill_value=-1, dtype=np.int32) - - @pytest.mark.parametrize("op", ["add", "sub", "mul", "truediv", "floordiv", "pow"]) - def test_binary_operators(self, op): - op = getattr(operator, op) - data1 = np.random.randn(20) - data2 = np.random.randn(20) - - data1[::2] = np.nan - data2[::3] = np.nan - - arr1 = SparseArray(data1) - arr2 = SparseArray(data2) - - data1[::2] = 3 - data2[::3] = 3 - farr1 = SparseArray(data1, fill_value=3) - farr2 = SparseArray(data2, fill_value=3) - - def _check_op(op, first, second): - res = op(first, second) - exp = SparseArray( - op(first.to_dense(), second.to_dense()), fill_value=first.fill_value - ) - assert isinstance(res, SparseArray) - tm.assert_almost_equal(res.to_dense(), exp.to_dense()) - - res2 = op(first, second.to_dense()) - assert isinstance(res2, SparseArray) - tm.assert_sp_array_equal(res, res2) - - res3 = op(first.to_dense(), second) - assert isinstance(res3, SparseArray) - tm.assert_sp_array_equal(res, res3) - - res4 = op(first, 4) - assert isinstance(res4, SparseArray) - - # Ignore this if the actual op raises (e.g. pow). - try: - exp = op(first.to_dense(), 4) - exp_fv = op(first.fill_value, 4) - except ValueError: - pass - else: - tm.assert_almost_equal(res4.fill_value, exp_fv) - tm.assert_almost_equal(res4.to_dense(), exp) - - with np.errstate(all="ignore"): - for first_arr, second_arr in [(arr1, arr2), (farr1, farr2)]: - _check_op(op, first_arr, second_arr) - def test_pickle(self): def _check_roundtrip(obj): unpickled = tm.round_trip_pickle(obj) @@ -880,6 +138,20 @@ def test_generator_warnings(self): pass assert len(w) == 0 + def test_where_retain_fill_value(self): + # GH#45691 don't lose fill_value on _where + arr = SparseArray([np.nan, 1.0], fill_value=0) + + mask = np.array([True, False]) + + res = arr._where(~mask, 1) + exp = SparseArray([1, 1.0], fill_value=0) + tm.assert_sp_array_equal(res, exp) + + ser = pd.Series(arr) + res = ser.where(~mask, 1) + tm.assert_series_equal(res, pd.Series(exp)) + def test_fillna(self): s = SparseArray([1, np.nan, np.nan, 3, np.nan]) res = s.fillna(-1) @@ -966,163 +238,6 @@ def test_nonzero(self): class TestSparseArrayAnalytics: - @pytest.mark.parametrize( - "data,pos,neg", - [ - ([True, True, True], True, False), - ([1, 2, 1], 1, 0), - ([1.0, 2.0, 1.0], 1.0, 0.0), - ], - ) - def test_all(self, data, pos, neg): - # GH 17570 - out = SparseArray(data).all() - assert out - - out = SparseArray(data, fill_value=pos).all() - assert out - - data[1] = neg - out = SparseArray(data).all() - assert not out - - out = SparseArray(data, fill_value=pos).all() - assert not out - - @pytest.mark.parametrize( - "data,pos,neg", - [ - ([True, True, True], True, False), - ([1, 2, 1], 1, 0), - ([1.0, 2.0, 1.0], 1.0, 0.0), - ], - ) - def test_numpy_all(self, data, pos, neg): - # GH 17570 - out = np.all(SparseArray(data)) - assert out - - out = np.all(SparseArray(data, fill_value=pos)) - assert out - - data[1] = neg - out = np.all(SparseArray(data)) - assert not out - - out = np.all(SparseArray(data, fill_value=pos)) - assert not out - - # raises with a different message on py2. - msg = "the 'out' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.all(SparseArray(data), out=np.array([])) - - @pytest.mark.parametrize( - "data,pos,neg", - [ - ([False, True, False], True, False), - ([0, 2, 0], 2, 0), - ([0.0, 2.0, 0.0], 2.0, 0.0), - ], - ) - def test_any(self, data, pos, neg): - # GH 17570 - out = SparseArray(data).any() - assert out - - out = SparseArray(data, fill_value=pos).any() - assert out - - data[1] = neg - out = SparseArray(data).any() - assert not out - - out = SparseArray(data, fill_value=pos).any() - assert not out - - @pytest.mark.parametrize( - "data,pos,neg", - [ - ([False, True, False], True, False), - ([0, 2, 0], 2, 0), - ([0.0, 2.0, 0.0], 2.0, 0.0), - ], - ) - def test_numpy_any(self, data, pos, neg): - # GH 17570 - out = np.any(SparseArray(data)) - assert out - - out = np.any(SparseArray(data, fill_value=pos)) - assert out - - data[1] = neg - out = np.any(SparseArray(data)) - assert not out - - out = np.any(SparseArray(data, fill_value=pos)) - assert not out - - msg = "the 'out' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.any(SparseArray(data), out=out) - - def test_sum(self): - data = np.arange(10).astype(float) - out = SparseArray(data).sum() - assert out == 45.0 - - data[5] = np.nan - out = SparseArray(data, fill_value=2).sum() - assert out == 40.0 - - out = SparseArray(data, fill_value=np.nan).sum() - assert out == 40.0 - - @pytest.mark.parametrize( - "arr", - [np.array([0, 1, np.nan, 1]), np.array([0, 1, 1])], - ) - @pytest.mark.parametrize("fill_value", [0, 1, np.nan]) - @pytest.mark.parametrize("min_count, expected", [(3, 2), (4, np.nan)]) - def test_sum_min_count(self, arr, fill_value, min_count, expected): - # https://github.com/pandas-dev/pandas/issues/25777 - sparray = SparseArray(arr, fill_value=fill_value) - result = sparray.sum(min_count=min_count) - if np.isnan(expected): - assert np.isnan(result) - else: - assert result == expected - - def test_bool_sum_min_count(self): - spar_bool = pd.arrays.SparseArray( - [False, True] * 5, dtype=np.bool8, fill_value=True - ) - res = spar_bool.sum(min_count=1) - assert res == 5 - res = spar_bool.sum(min_count=11) - assert isna(res) - - def test_numpy_sum(self): - data = np.arange(10).astype(float) - out = np.sum(SparseArray(data)) - assert out == 45.0 - - data[5] = np.nan - out = np.sum(SparseArray(data, fill_value=2)) - assert out == 40.0 - - out = np.sum(SparseArray(data, fill_value=np.nan)) - assert out == 40.0 - - msg = "the 'dtype' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.sum(SparseArray(data), dtype=np.int64) - - msg = "the 'out' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.sum(SparseArray(data), out=out) - @pytest.mark.parametrize( "data,expected", [ @@ -1163,32 +278,6 @@ def test_cumsum(self, data, expected, numpy): with pytest.raises(ValueError, match=msg): SparseArray(data).cumsum(axis=axis) - def test_mean(self): - data = np.arange(10).astype(float) - out = SparseArray(data).mean() - assert out == 4.5 - - data[5] = np.nan - out = SparseArray(data).mean() - assert out == 40.0 / 9 - - def test_numpy_mean(self): - data = np.arange(10).astype(float) - out = np.mean(SparseArray(data)) - assert out == 4.5 - - data[5] = np.nan - out = np.mean(SparseArray(data)) - assert out == 40.0 / 9 - - msg = "the 'dtype' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.mean(SparseArray(data), dtype=np.int64) - - msg = "the 'out' parameter is not supported" - with pytest.raises(ValueError, match=msg): - np.mean(SparseArray(data), out=out) - def test_ufunc(self): # GH 13853 make sure ufunc is applied to fill_value sparse = SparseArray([1, np.nan, 2, np.nan, -2]) @@ -1267,86 +356,6 @@ def test_npoints(self): assert arr.npoints == 1 -class TestAccessor: - @pytest.mark.parametrize("attr", ["npoints", "density", "fill_value", "sp_values"]) - def test_get_attributes(self, attr): - arr = SparseArray([0, 1]) - ser = pd.Series(arr) - - result = getattr(ser.sparse, attr) - expected = getattr(arr, attr) - assert result == expected - - @td.skip_if_no_scipy - def test_from_coo(self): - import scipy.sparse - - row = [0, 3, 1, 0] - col = [0, 3, 1, 2] - data = [4, 5, 7, 9] - # TODO(scipy#13585): Remove dtype when scipy is fixed - # https://github.com/scipy/scipy/issues/13585 - sp_array = scipy.sparse.coo_matrix((data, (row, col)), dtype="int") - result = pd.Series.sparse.from_coo(sp_array) - - index = pd.MultiIndex.from_arrays([[0, 0, 1, 3], [0, 2, 1, 3]]) - expected = pd.Series([4, 9, 7, 5], index=index, dtype="Sparse[int]") - tm.assert_series_equal(result, expected) - - @td.skip_if_no_scipy - @pytest.mark.parametrize( - "sort_labels, expected_rows, expected_cols, expected_values_pos", - [ - ( - False, - [("b", 2), ("a", 2), ("b", 1), ("a", 1)], - [("z", 1), ("z", 2), ("x", 2), ("z", 0)], - {1: (1, 0), 3: (3, 3)}, - ), - ( - True, - [("a", 1), ("a", 2), ("b", 1), ("b", 2)], - [("x", 2), ("z", 0), ("z", 1), ("z", 2)], - {1: (1, 2), 3: (0, 1)}, - ), - ], - ) - def test_to_coo( - self, sort_labels, expected_rows, expected_cols, expected_values_pos - ): - import scipy.sparse - - values = SparseArray([0, np.nan, 1, 0, None, 3], fill_value=0) - index = pd.MultiIndex.from_tuples( - [ - ("b", 2, "z", 1), - ("a", 2, "z", 2), - ("a", 2, "z", 1), - ("a", 2, "x", 2), - ("b", 1, "z", 1), - ("a", 1, "z", 0), - ] - ) - ss = pd.Series(values, index=index) - - expected_A = np.zeros((4, 4)) - for value, (row, col) in expected_values_pos.items(): - expected_A[row, col] = value - - A, rows, cols = ss.sparse.to_coo( - row_levels=(0, 1), column_levels=(2, 3), sort_labels=sort_labels - ) - assert isinstance(A, scipy.sparse.coo_matrix) - tm.assert_numpy_array_equal(A.toarray(), expected_A) - assert rows == expected_rows - assert cols == expected_cols - - def test_non_sparse_raises(self): - ser = pd.Series([1, 2, 3]) - with pytest.raises(AttributeError, match=".sparse"): - ser.sparse.density - - def test_setting_fill_value_fillna_still_works(): # This is why letting users update fill_value / dtype is bad # astype has the same problem. @@ -1454,78 +463,3 @@ def test_drop_duplicates_fill_value(): result = df.drop_duplicates() expected = pd.DataFrame({i: SparseArray([0.0], fill_value=0) for i in range(5)}) tm.assert_frame_equal(result, expected) - - -class TestMinMax: - @pytest.mark.parametrize( - "raw_data,max_expected,min_expected", - [ - (np.arange(5.0), [4], [0]), - (-np.arange(5.0), [0], [-4]), - (np.array([0, 1, 2, np.nan, 4]), [4], [0]), - (np.array([np.nan] * 5), [np.nan], [np.nan]), - (np.array([]), [np.nan], [np.nan]), - ], - ) - def test_nan_fill_value(self, raw_data, max_expected, min_expected): - arr = SparseArray(raw_data) - max_result = arr.max() - min_result = arr.min() - assert max_result in max_expected - assert min_result in min_expected - - max_result = arr.max(skipna=False) - min_result = arr.min(skipna=False) - if np.isnan(raw_data).any(): - assert np.isnan(max_result) - assert np.isnan(min_result) - else: - assert max_result in max_expected - assert min_result in min_expected - - @pytest.mark.parametrize( - "fill_value,max_expected,min_expected", - [ - (100, 100, 0), - (-100, 1, -100), - ], - ) - def test_fill_value(self, fill_value, max_expected, min_expected): - arr = SparseArray( - np.array([fill_value, 0, 1]), dtype=SparseDtype("int", fill_value) - ) - max_result = arr.max() - assert max_result == max_expected - - min_result = arr.min() - assert min_result == min_expected - - def test_only_fill_value(self): - fv = 100 - arr = SparseArray(np.array([fv, fv, fv]), dtype=SparseDtype("int", fv)) - assert len(arr._valid_sp_values) == 0 - - assert arr.max() == fv - assert arr.min() == fv - assert arr.max(skipna=False) == fv - assert arr.min(skipna=False) == fv - - @pytest.mark.parametrize("func", ["min", "max"]) - @pytest.mark.parametrize("data", [np.array([]), np.array([np.nan, np.nan])]) - @pytest.mark.parametrize( - "dtype,expected", - [ - (SparseDtype(np.float64, np.nan), np.nan), - (SparseDtype(np.float64, 5.0), np.nan), - (SparseDtype("datetime64[ns]", pd.NaT), pd.NaT), - (SparseDtype("datetime64[ns]", pd.to_datetime("2018-05-05")), pd.NaT), - ], - ) - def test_na_value_if_no_valid_values(self, func, data, dtype, expected): - arr = SparseArray(data, dtype=dtype) - result = getattr(arr, func)() - if expected is pd.NaT: - # TODO: pin down whether we wrap datetime64("NaT") - assert result is pd.NaT or np.isnat(result) - else: - assert np.isnan(result) diff --git a/pandas/tests/arrays/sparse/test_astype.py b/pandas/tests/arrays/sparse/test_astype.py new file mode 100644 index 0000000000000..88efd0f4ea09f --- /dev/null +++ b/pandas/tests/arrays/sparse/test_astype.py @@ -0,0 +1,129 @@ +import numpy as np +import pytest + +from pandas._libs.sparse import IntIndex + +from pandas import Timestamp +import pandas._testing as tm +from pandas.core.arrays.sparse import ( + SparseArray, + SparseDtype, +) + + +class TestAstype: + def test_astype(self): + # float -> float + arr = SparseArray([None, None, 0, 2]) + result = arr.astype("Sparse[float32]") + expected = SparseArray([None, None, 0, 2], dtype=np.dtype("float32")) + tm.assert_sp_array_equal(result, expected) + + dtype = SparseDtype("float64", fill_value=0) + result = arr.astype(dtype) + expected = SparseArray._simple_new( + np.array([0.0, 2.0], dtype=dtype.subtype), IntIndex(4, [2, 3]), dtype + ) + tm.assert_sp_array_equal(result, expected) + + dtype = SparseDtype("int64", 0) + result = arr.astype(dtype) + expected = SparseArray._simple_new( + np.array([0, 2], dtype=np.int64), IntIndex(4, [2, 3]), dtype + ) + tm.assert_sp_array_equal(result, expected) + + arr = SparseArray([0, np.nan, 0, 1], fill_value=0) + with pytest.raises(ValueError, match="NA"): + arr.astype("Sparse[i8]") + + def test_astype_bool(self): + a = SparseArray([1, 0, 0, 1], dtype=SparseDtype(int, 0)) + with tm.assert_produces_warning(FutureWarning, match="astype from Sparse"): + result = a.astype(bool) + expected = SparseArray( + [True, False, False, True], dtype=SparseDtype(bool, False) + ) + tm.assert_sp_array_equal(result, expected) + + # update fill value + result = a.astype(SparseDtype(bool, False)) + expected = SparseArray( + [True, False, False, True], dtype=SparseDtype(bool, False) + ) + tm.assert_sp_array_equal(result, expected) + + def test_astype_all(self, any_real_numpy_dtype): + vals = np.array([1, 2, 3]) + arr = SparseArray(vals, fill_value=1) + typ = np.dtype(any_real_numpy_dtype) + with tm.assert_produces_warning(FutureWarning, match="astype from Sparse"): + res = arr.astype(typ) + assert res.dtype == SparseDtype(typ, 1) + assert res.sp_values.dtype == typ + + tm.assert_numpy_array_equal(np.asarray(res.to_dense()), vals.astype(typ)) + + @pytest.mark.parametrize( + "arr, dtype, expected", + [ + ( + SparseArray([0, 1]), + "float", + SparseArray([0.0, 1.0], dtype=SparseDtype(float, 0.0)), + ), + (SparseArray([0, 1]), bool, SparseArray([False, True])), + ( + SparseArray([0, 1], fill_value=1), + bool, + SparseArray([False, True], dtype=SparseDtype(bool, True)), + ), + pytest.param( + SparseArray([0, 1]), + "datetime64[ns]", + SparseArray( + np.array([0, 1], dtype="datetime64[ns]"), + dtype=SparseDtype("datetime64[ns]", Timestamp("1970")), + ), + marks=[pytest.mark.xfail(reason="NumPy-7619")], + ), + ( + SparseArray([0, 1, 10]), + str, + SparseArray(["0", "1", "10"], dtype=SparseDtype(str, "0")), + ), + (SparseArray(["10", "20"]), float, SparseArray([10.0, 20.0])), + ( + SparseArray([0, 1, 0]), + object, + SparseArray([0, 1, 0], dtype=SparseDtype(object, 0)), + ), + ], + ) + def test_astype_more(self, arr, dtype, expected): + + if isinstance(dtype, SparseDtype): + warn = None + else: + warn = FutureWarning + + with tm.assert_produces_warning(warn, match="astype from SparseDtype"): + result = arr.astype(dtype) + tm.assert_sp_array_equal(result, expected) + + def test_astype_nan_raises(self): + arr = SparseArray([1.0, np.nan]) + with pytest.raises(ValueError, match="Cannot convert non-finite"): + msg = "astype from SparseDtype" + with tm.assert_produces_warning(FutureWarning, match=msg): + arr.astype(int) + + def test_astype_copy_false(self): + # GH#34456 bug caused by using .view instead of .astype in astype_nansafe + arr = SparseArray([1, 2, 3]) + + dtype = SparseDtype(float, 0) + + result = arr.astype(dtype, copy=False) + expected = SparseArray([1.0, 2.0, 3.0], fill_value=0.0) + tm.assert_sp_array_equal(result, expected) diff --git a/pandas/tests/arrays/sparse/test_constructors.py b/pandas/tests/arrays/sparse/test_constructors.py new file mode 100644 index 0000000000000..c1fcda4fcd121 --- /dev/null +++ b/pandas/tests/arrays/sparse/test_constructors.py @@ -0,0 +1,307 @@ +import numpy as np +import pytest + +from pandas._libs.sparse import IntIndex +import pandas.util._test_decorators as td + +import pandas as pd +from pandas import isna +import pandas._testing as tm +from pandas.core.arrays.sparse import ( + SparseArray, + SparseDtype, +) + + +class TestConstructors: + def test_constructor_dtype(self): + arr = SparseArray([np.nan, 1, 2, np.nan]) + assert arr.dtype == SparseDtype(np.float64, np.nan) + assert arr.dtype.subtype == np.float64 + assert np.isnan(arr.fill_value) + + arr = SparseArray([np.nan, 1, 2, np.nan], fill_value=0) + assert arr.dtype == SparseDtype(np.float64, 0) + assert arr.fill_value == 0 + + arr = SparseArray([0, 1, 2, 4], dtype=np.float64) + assert arr.dtype == SparseDtype(np.float64, np.nan) + assert np.isnan(arr.fill_value) + + arr = SparseArray([0, 1, 2, 4], dtype=np.int64) + assert arr.dtype == SparseDtype(np.int64, 0) + assert arr.fill_value == 0 + + arr = SparseArray([0, 1, 2, 4], fill_value=0, dtype=np.int64) + assert arr.dtype == SparseDtype(np.int64, 0) + assert arr.fill_value == 0 + + arr = SparseArray([0, 1, 2, 4], dtype=None) + assert arr.dtype == SparseDtype(np.int64, 0) + assert arr.fill_value == 0 + + arr = SparseArray([0, 1, 2, 4], fill_value=0, dtype=None) + assert arr.dtype == SparseDtype(np.int64, 0) + assert arr.fill_value == 0 + + def test_constructor_dtype_str(self): + result = SparseArray([1, 2, 3], dtype="int") + expected = SparseArray([1, 2, 3], dtype=int) + tm.assert_sp_array_equal(result, expected) + + def test_constructor_sparse_dtype(self): + result = SparseArray([1, 0, 0, 1], dtype=SparseDtype("int64", -1)) + expected = SparseArray([1, 0, 0, 1], fill_value=-1, dtype=np.int64) + tm.assert_sp_array_equal(result, expected) + assert result.sp_values.dtype == np.dtype("int64") + + def test_constructor_sparse_dtype_str(self): + result = SparseArray([1, 0, 0, 1], dtype="Sparse[int32]") + expected = SparseArray([1, 0, 0, 1], dtype=np.int32) + tm.assert_sp_array_equal(result, expected) + assert result.sp_values.dtype == np.dtype("int32") + + def test_constructor_object_dtype(self): + # GH#11856 + arr = SparseArray(["A", "A", np.nan, "B"], dtype=object) + assert arr.dtype == SparseDtype(object) + assert np.isnan(arr.fill_value) + + arr = SparseArray(["A", "A", np.nan, "B"], dtype=object, fill_value="A") + assert arr.dtype == SparseDtype(object, "A") + assert arr.fill_value == "A" + + # GH#17574 + data = [False, 0, 100.0, 0.0] + arr = SparseArray(data, dtype=object, fill_value=False) + assert arr.dtype == SparseDtype(object, False) + assert arr.fill_value is False + arr_expected = np.array(data, dtype=object) + it = (type(x) == type(y) and x == y for x, y in zip(arr, arr_expected)) + assert np.fromiter(it, dtype=np.bool_).all() + + @pytest.mark.parametrize("dtype", [SparseDtype(int, 0), int]) + def test_constructor_na_dtype(self, dtype): + with pytest.raises(ValueError, match="Cannot convert"): + SparseArray([0, 1, np.nan], dtype=dtype) + + def test_constructor_warns_when_losing_timezone(self): + # GH#32501 warn when losing timezone information + dti = pd.date_range("2016-01-01", periods=3, tz="US/Pacific") + + expected = SparseArray(np.asarray(dti, dtype="datetime64[ns]")) + + with tm.assert_produces_warning(UserWarning): + result = SparseArray(dti) + + tm.assert_sp_array_equal(result, expected) + + with tm.assert_produces_warning(UserWarning): + result = SparseArray(pd.Series(dti)) + + tm.assert_sp_array_equal(result, expected) + + def test_constructor_spindex_dtype(self): + arr = SparseArray(data=[1, 2], sparse_index=IntIndex(4, [1, 2])) + # TODO: actionable? + # XXX: Behavior change: specifying SparseIndex no longer changes the + # fill_value + expected = SparseArray([0, 1, 2, 0], kind="integer") + tm.assert_sp_array_equal(arr, expected) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + arr = SparseArray( + data=[1, 2, 3], + sparse_index=IntIndex(4, [1, 2, 3]), + dtype=np.int64, + fill_value=0, + ) + exp = SparseArray([0, 1, 2, 3], dtype=np.int64, fill_value=0) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + arr = SparseArray( + data=[1, 2], sparse_index=IntIndex(4, [1, 2]), fill_value=0, dtype=np.int64 + ) + exp = SparseArray([0, 1, 2, 0], fill_value=0, dtype=np.int64) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + arr = SparseArray( + data=[1, 2, 3], + sparse_index=IntIndex(4, [1, 2, 3]), + dtype=None, + fill_value=0, + ) + exp = SparseArray([0, 1, 2, 3], dtype=None) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + @pytest.mark.parametrize("sparse_index", [None, IntIndex(1, [0])]) + def test_constructor_spindex_dtype_scalar(self, sparse_index): + # scalar input + arr = SparseArray(data=1, sparse_index=sparse_index, dtype=None) + exp = SparseArray([1], dtype=None) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + arr = SparseArray(data=1, sparse_index=IntIndex(1, [0]), dtype=None) + exp = SparseArray([1], dtype=None) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + def test_constructor_spindex_dtype_scalar_broadcasts(self): + arr = SparseArray( + data=[1, 2], sparse_index=IntIndex(4, [1, 2]), fill_value=0, dtype=None + ) + exp = SparseArray([0, 1, 2, 0], fill_value=0, dtype=None) + tm.assert_sp_array_equal(arr, exp) + assert arr.dtype == SparseDtype(np.int64) + assert arr.fill_value == 0 + + @pytest.mark.parametrize( + "data, fill_value", + [ + (np.array([1, 2]), 0), + (np.array([1.0, 2.0]), np.nan), + ([True, False], False), + ([pd.Timestamp("2017-01-01")], pd.NaT), + ], + ) + def test_constructor_inferred_fill_value(self, data, fill_value): + result = SparseArray(data).fill_value + + if isna(fill_value): + assert isna(result) + else: + assert result == fill_value + + @pytest.mark.parametrize("format", ["coo", "csc", "csr"]) + @pytest.mark.parametrize("size", [0, 10]) + @td.skip_if_no_scipy + def test_from_spmatrix(self, size, format): + import scipy.sparse + + mat = scipy.sparse.random(size, 1, density=0.5, format=format) + result = SparseArray.from_spmatrix(mat) + + result = np.asarray(result) + expected = mat.toarray().ravel() + tm.assert_numpy_array_equal(result, expected) + + @pytest.mark.parametrize("format", ["coo", "csc", "csr"]) + @td.skip_if_no_scipy + def test_from_spmatrix_including_explicit_zero(self, format): + import scipy.sparse + + mat = scipy.sparse.random(10, 1, density=0.5, format=format) + mat.data[0] = 0 + result = SparseArray.from_spmatrix(mat) + + result = np.asarray(result) + expected = mat.toarray().ravel() + tm.assert_numpy_array_equal(result, expected) + + @td.skip_if_no_scipy + def test_from_spmatrix_raises(self): + import scipy.sparse + + mat = scipy.sparse.eye(5, 4, format="csc") + + with pytest.raises(ValueError, match="not '4'"): + SparseArray.from_spmatrix(mat) + + @pytest.mark.parametrize( + "scalar,dtype", + [ + (False, SparseDtype(bool, False)), + (0.0, SparseDtype("float64", 0)), + (1, SparseDtype("int64", 1)), + ("z", SparseDtype("object", "z")), + ], + ) + def test_scalar_with_index_infer_dtype(self, scalar, dtype): + # GH#19163 + with tm.assert_produces_warning( + FutureWarning, match="The index argument has been deprecated" + ): + arr = SparseArray(scalar, index=[1, 2, 3], fill_value=scalar) + exp = SparseArray([scalar, scalar, scalar], fill_value=scalar) + + tm.assert_sp_array_equal(arr, exp) + + assert arr.dtype == dtype + assert exp.dtype == dtype + + def test_constructor_from_too_large_array(self): + with pytest.raises(TypeError, match="expected dimension <= 1 data"): + SparseArray(np.arange(10).reshape((2, 5))) + + def test_constructor_from_sparse(self): + zarr = SparseArray([0, 0, 1, 2, 3, 0, 4, 5, 0, 6], fill_value=0) + res = SparseArray(zarr) + assert res.fill_value == 0 + tm.assert_almost_equal(res.sp_values, zarr.sp_values) + + def test_constructor_copy(self): + arr_data = np.array([np.nan, np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 6]) + arr = SparseArray(arr_data) + + cp = SparseArray(arr, copy=True) + cp.sp_values[:3] = 0 + assert not (arr.sp_values[:3] == 0).any() + + not_copy = SparseArray(arr) + not_copy.sp_values[:3] = 0 + assert (arr.sp_values[:3] == 0).all() + + def test_constructor_bool(self): + # GH#10648 + data = np.array([False, False, True, True, False, False]) + arr = SparseArray(data, fill_value=False, dtype=bool) + + assert arr.dtype == SparseDtype(bool) + tm.assert_numpy_array_equal(arr.sp_values, np.array([True, True])) + # Behavior change: np.asarray densifies. + # tm.assert_numpy_array_equal(arr.sp_values, np.asarray(arr)) + tm.assert_numpy_array_equal(arr.sp_index.indices, np.array([2, 3], np.int32)) + + dense = arr.to_dense() + assert dense.dtype == bool + tm.assert_numpy_array_equal(dense, data) + + def test_constructor_bool_fill_value(self): + arr = SparseArray([True, False, True], dtype=None) + assert arr.dtype == SparseDtype(np.bool_) + assert not arr.fill_value + + arr = SparseArray([True, False, True], dtype=np.bool_) + assert arr.dtype == SparseDtype(np.bool_) + assert not arr.fill_value + + arr = SparseArray([True, False, True], dtype=np.bool_, fill_value=True) + assert arr.dtype == SparseDtype(np.bool_, True) + assert arr.fill_value + + def test_constructor_float32(self): + # GH#10648 + data = np.array([1.0, np.nan, 3], dtype=np.float32) + arr = SparseArray(data, dtype=np.float32) + + assert arr.dtype == SparseDtype(np.float32) + tm.assert_numpy_array_equal(arr.sp_values, np.array([1, 3], dtype=np.float32)) + # Behavior change: np.asarray densifies. + # tm.assert_numpy_array_equal(arr.sp_values, np.asarray(arr)) + tm.assert_numpy_array_equal( + arr.sp_index.indices, np.array([0, 2], dtype=np.int32) + ) + + dense = arr.to_dense() + assert dense.dtype == np.float32 + tm.assert_numpy_array_equal(dense, data) diff --git a/pandas/tests/arrays/sparse/test_indexing.py b/pandas/tests/arrays/sparse/test_indexing.py new file mode 100644 index 0000000000000..2794fe33e53e5 --- /dev/null +++ b/pandas/tests/arrays/sparse/test_indexing.py @@ -0,0 +1,292 @@ +import numpy as np +import pytest + +import pandas as pd +import pandas._testing as tm +from pandas.core.arrays.sparse import ( + SparseArray, + SparseDtype, +) + +arr_data = np.array([np.nan, np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 6]) +arr = SparseArray(arr_data) + + +class TestGetitem: + def test_getitem(self): + def _checkit(i): + tm.assert_almost_equal(arr[i], arr.to_dense()[i]) + + for i in range(len(arr)): + _checkit(i) + _checkit(-i) + + def test_getitem_arraylike_mask(self): + arr = SparseArray([0, 1, 2]) + result = arr[[True, False, True]] + expected = SparseArray([0, 2]) + tm.assert_sp_array_equal(result, expected) + + @pytest.mark.parametrize( + "slc", + [ + np.s_[:], + np.s_[1:10], + np.s_[1:100], + np.s_[10:1], + np.s_[:-3], + np.s_[-5:-4], + np.s_[:-12], + np.s_[-12:], + np.s_[2:], + np.s_[2::3], + np.s_[::2], + np.s_[::-1], + np.s_[::-2], + np.s_[1:6:2], + np.s_[:-6:-2], + ], + ) + @pytest.mark.parametrize( + "as_dense", [[np.nan] * 10, [1] * 10, [np.nan] * 5 + [1] * 5, []] + ) + def test_getslice(self, slc, as_dense): + as_dense = np.array(as_dense) + arr = SparseArray(as_dense) + + result = arr[slc] + expected = SparseArray(as_dense[slc]) + + tm.assert_sp_array_equal(result, expected) + + def test_getslice_tuple(self): + dense = np.array([np.nan, 0, 3, 4, 0, 5, np.nan, np.nan, 0]) + + sparse = SparseArray(dense) + res = sparse[(slice(4, None),)] + exp = SparseArray(dense[4:]) + tm.assert_sp_array_equal(res, exp) + + sparse = SparseArray(dense, fill_value=0) + res = sparse[(slice(4, None),)] + exp = SparseArray(dense[4:], fill_value=0) + tm.assert_sp_array_equal(res, exp) + + msg = "too many indices for array" + with pytest.raises(IndexError, match=msg): + sparse[4:, :] + + with pytest.raises(IndexError, match=msg): + # check numpy compat + dense[4:, :] + + def test_boolean_slice_empty(self): + arr = SparseArray([0, 1, 2]) + res = arr[[False, False, False]] + assert res.dtype == arr.dtype + + def test_getitem_bool_sparse_array(self): + # GH 23122 + spar_bool = SparseArray([False, True] * 5, dtype=np.bool8, fill_value=True) + exp = SparseArray([np.nan, 2, np.nan, 5, 6]) + tm.assert_sp_array_equal(arr[spar_bool], exp) + + spar_bool = ~spar_bool + res = arr[spar_bool] + exp = SparseArray([np.nan, 1, 3, 4, np.nan]) + tm.assert_sp_array_equal(res, exp) + + spar_bool = SparseArray( + [False, True, np.nan] * 3, dtype=np.bool8, fill_value=np.nan + ) + res = arr[spar_bool] + exp = SparseArray([np.nan, 3, 5]) + tm.assert_sp_array_equal(res, exp) + + def test_getitem_bool_sparse_array_as_comparison(self): + # GH 45110 + arr = SparseArray([1, 2, 3, 4, np.nan, np.nan], fill_value=np.nan) + res = arr[arr > 2] + exp = SparseArray([3.0, 4.0], fill_value=np.nan) + tm.assert_sp_array_equal(res, exp) + + def test_get_item(self): + zarr = SparseArray([0, 0, 1, 2, 3, 0, 4, 5, 0, 6], fill_value=0) + + assert np.isnan(arr[1]) + assert arr[2] == 1 + assert arr[7] == 5 + + assert zarr[0] == 0 + assert zarr[2] == 1 + assert zarr[7] == 5 + + errmsg = "must be an integer between -10 and 10" + + with pytest.raises(IndexError, match=errmsg): + arr[11] + + with pytest.raises(IndexError, match=errmsg): + arr[-11] + + assert arr[-1] == arr[len(arr) - 1] + + +class TestSetitem: + def test_set_item(self): + arr = SparseArray(arr_data).copy() + + def setitem(): + arr[5] = 3 + + def setslice(): + arr[1:5] = 2 + + with pytest.raises(TypeError, match="assignment via setitem"): + setitem() + + with pytest.raises(TypeError, match="assignment via setitem"): + setslice() + + +class TestTake: + def test_take_scalar_raises(self): + msg = "'indices' must be an array, not a scalar '2'." + with pytest.raises(ValueError, match=msg): + arr.take(2) + + def test_take(self): + exp = SparseArray(np.take(arr_data, [2, 3])) + tm.assert_sp_array_equal(arr.take([2, 3]), exp) + + exp = SparseArray(np.take(arr_data, [0, 1, 2])) + tm.assert_sp_array_equal(arr.take([0, 1, 2]), exp) + + def test_take_all_empty(self): + a = pd.array([0, 0], dtype=SparseDtype("int64")) + result = a.take([0, 1], allow_fill=True, fill_value=np.nan) + tm.assert_sp_array_equal(a, result) + + def test_take_fill_value(self): + data = np.array([1, np.nan, 0, 3, 0]) + sparse = SparseArray(data, fill_value=0) + + exp = SparseArray(np.take(data, [0]), fill_value=0) + tm.assert_sp_array_equal(sparse.take([0]), exp) + + exp = SparseArray(np.take(data, [1, 3, 4]), fill_value=0) + tm.assert_sp_array_equal(sparse.take([1, 3, 4]), exp) + + def test_take_negative(self): + exp = SparseArray(np.take(arr_data, [-1])) + tm.assert_sp_array_equal(arr.take([-1]), exp) + + exp = SparseArray(np.take(arr_data, [-4, -3, -2])) + tm.assert_sp_array_equal(arr.take([-4, -3, -2]), exp) + + def test_bad_take(self): + with pytest.raises(IndexError, match="bounds"): + arr.take([11]) + + def test_take_filling(self): + # similar tests as GH 12631 + sparse = SparseArray([np.nan, np.nan, 1, np.nan, 4]) + result = sparse.take(np.array([1, 0, -1])) + expected = SparseArray([np.nan, np.nan, 4]) + tm.assert_sp_array_equal(result, expected) + + # TODO: actionable? + # XXX: test change: fill_value=True -> allow_fill=True + result = sparse.take(np.array([1, 0, -1]), allow_fill=True) + expected = SparseArray([np.nan, np.nan, np.nan]) + tm.assert_sp_array_equal(result, expected) + + # allow_fill=False + result = sparse.take(np.array([1, 0, -1]), allow_fill=False, fill_value=True) + expected = SparseArray([np.nan, np.nan, 4]) + tm.assert_sp_array_equal(result, expected) + + msg = "Invalid value in 'indices'" + with pytest.raises(ValueError, match=msg): + sparse.take(np.array([1, 0, -2]), allow_fill=True) + + with pytest.raises(ValueError, match=msg): + sparse.take(np.array([1, 0, -5]), allow_fill=True) + + msg = "out of bounds value in 'indices'" + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, -6])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5]), allow_fill=True) + + def test_take_filling_fill_value(self): + # same tests as GH#12631 + sparse = SparseArray([np.nan, 0, 1, 0, 4], fill_value=0) + result = sparse.take(np.array([1, 0, -1])) + expected = SparseArray([0, np.nan, 4], fill_value=0) + tm.assert_sp_array_equal(result, expected) + + # fill_value + result = sparse.take(np.array([1, 0, -1]), allow_fill=True) + # TODO: actionable? + # XXX: behavior change. + # the old way of filling self.fill_value doesn't follow EA rules. + # It's supposed to be self.dtype.na_value (nan in this case) + expected = SparseArray([0, np.nan, np.nan], fill_value=0) + tm.assert_sp_array_equal(result, expected) + + # allow_fill=False + result = sparse.take(np.array([1, 0, -1]), allow_fill=False, fill_value=True) + expected = SparseArray([0, np.nan, 4], fill_value=0) + tm.assert_sp_array_equal(result, expected) + + msg = "Invalid value in 'indices'." + with pytest.raises(ValueError, match=msg): + sparse.take(np.array([1, 0, -2]), allow_fill=True) + with pytest.raises(ValueError, match=msg): + sparse.take(np.array([1, 0, -5]), allow_fill=True) + + msg = "out of bounds value in 'indices'" + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, -6])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5]), fill_value=True) + + @pytest.mark.parametrize("kind", ["block", "integer"]) + def test_take_filling_all_nan(self, kind): + sparse = SparseArray([np.nan, np.nan, np.nan, np.nan, np.nan], kind=kind) + result = sparse.take(np.array([1, 0, -1])) + expected = SparseArray([np.nan, np.nan, np.nan], kind=kind) + tm.assert_sp_array_equal(result, expected) + + result = sparse.take(np.array([1, 0, -1]), fill_value=True) + expected = SparseArray([np.nan, np.nan, np.nan], kind=kind) + tm.assert_sp_array_equal(result, expected) + + msg = "out of bounds value in 'indices'" + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, -6])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5])) + with pytest.raises(IndexError, match=msg): + sparse.take(np.array([1, 5]), fill_value=True) + + +class TestWhere: + def test_where_retain_fill_value(self): + # GH#45691 don't lose fill_value on _where + arr = SparseArray([np.nan, 1.0], fill_value=0) + + mask = np.array([True, False]) + + res = arr._where(~mask, 1) + exp = SparseArray([1, 1.0], fill_value=0) + tm.assert_sp_array_equal(res, exp) + + ser = pd.Series(arr) + res = ser.where(~mask, 1) + tm.assert_series_equal(res, pd.Series(exp)) diff --git a/pandas/tests/arrays/sparse/test_reductions.py b/pandas/tests/arrays/sparse/test_reductions.py new file mode 100644 index 0000000000000..a33a282bb4869 --- /dev/null +++ b/pandas/tests/arrays/sparse/test_reductions.py @@ -0,0 +1,270 @@ +import numpy as np +import pytest + +from pandas import ( + NaT, + Timestamp, + isna, +) +from pandas.core.arrays.sparse import ( + SparseArray, + SparseDtype, +) + + +class TestReductions: + @pytest.mark.parametrize( + "data,pos,neg", + [ + ([True, True, True], True, False), + ([1, 2, 1], 1, 0), + ([1.0, 2.0, 1.0], 1.0, 0.0), + ], + ) + def test_all(self, data, pos, neg): + # GH#17570 + out = SparseArray(data).all() + assert out + + out = SparseArray(data, fill_value=pos).all() + assert out + + data[1] = neg + out = SparseArray(data).all() + assert not out + + out = SparseArray(data, fill_value=pos).all() + assert not out + + @pytest.mark.parametrize( + "data,pos,neg", + [ + ([True, True, True], True, False), + ([1, 2, 1], 1, 0), + ([1.0, 2.0, 1.0], 1.0, 0.0), + ], + ) + def test_numpy_all(self, data, pos, neg): + # GH#17570 + out = np.all(SparseArray(data)) + assert out + + out = np.all(SparseArray(data, fill_value=pos)) + assert out + + data[1] = neg + out = np.all(SparseArray(data)) + assert not out + + out = np.all(SparseArray(data, fill_value=pos)) + assert not out + + # raises with a different message on py2. + msg = "the 'out' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.all(SparseArray(data), out=np.array([])) + + @pytest.mark.parametrize( + "data,pos,neg", + [ + ([False, True, False], True, False), + ([0, 2, 0], 2, 0), + ([0.0, 2.0, 0.0], 2.0, 0.0), + ], + ) + def test_any(self, data, pos, neg): + # GH#17570 + out = SparseArray(data).any() + assert out + + out = SparseArray(data, fill_value=pos).any() + assert out + + data[1] = neg + out = SparseArray(data).any() + assert not out + + out = SparseArray(data, fill_value=pos).any() + assert not out + + @pytest.mark.parametrize( + "data,pos,neg", + [ + ([False, True, False], True, False), + ([0, 2, 0], 2, 0), + ([0.0, 2.0, 0.0], 2.0, 0.0), + ], + ) + def test_numpy_any(self, data, pos, neg): + # GH#17570 + out = np.any(SparseArray(data)) + assert out + + out = np.any(SparseArray(data, fill_value=pos)) + assert out + + data[1] = neg + out = np.any(SparseArray(data)) + assert not out + + out = np.any(SparseArray(data, fill_value=pos)) + assert not out + + msg = "the 'out' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.any(SparseArray(data), out=out) + + def test_sum(self): + data = np.arange(10).astype(float) + out = SparseArray(data).sum() + assert out == 45.0 + + data[5] = np.nan + out = SparseArray(data, fill_value=2).sum() + assert out == 40.0 + + out = SparseArray(data, fill_value=np.nan).sum() + assert out == 40.0 + + @pytest.mark.parametrize( + "arr", + [np.array([0, 1, np.nan, 1]), np.array([0, 1, 1])], + ) + @pytest.mark.parametrize("fill_value", [0, 1, np.nan]) + @pytest.mark.parametrize("min_count, expected", [(3, 2), (4, np.nan)]) + def test_sum_min_count(self, arr, fill_value, min_count, expected): + # GH#25777 + sparray = SparseArray(arr, fill_value=fill_value) + result = sparray.sum(min_count=min_count) + if np.isnan(expected): + assert np.isnan(result) + else: + assert result == expected + + def test_bool_sum_min_count(self): + spar_bool = SparseArray([False, True] * 5, dtype=np.bool8, fill_value=True) + res = spar_bool.sum(min_count=1) + assert res == 5 + res = spar_bool.sum(min_count=11) + assert isna(res) + + def test_numpy_sum(self): + data = np.arange(10).astype(float) + out = np.sum(SparseArray(data)) + assert out == 45.0 + + data[5] = np.nan + out = np.sum(SparseArray(data, fill_value=2)) + assert out == 40.0 + + out = np.sum(SparseArray(data, fill_value=np.nan)) + assert out == 40.0 + + msg = "the 'dtype' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.sum(SparseArray(data), dtype=np.int64) + + msg = "the 'out' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.sum(SparseArray(data), out=out) + + def test_mean(self): + data = np.arange(10).astype(float) + out = SparseArray(data).mean() + assert out == 4.5 + + data[5] = np.nan + out = SparseArray(data).mean() + assert out == 40.0 / 9 + + def test_numpy_mean(self): + data = np.arange(10).astype(float) + out = np.mean(SparseArray(data)) + assert out == 4.5 + + data[5] = np.nan + out = np.mean(SparseArray(data)) + assert out == 40.0 / 9 + + msg = "the 'dtype' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.mean(SparseArray(data), dtype=np.int64) + + msg = "the 'out' parameter is not supported" + with pytest.raises(ValueError, match=msg): + np.mean(SparseArray(data), out=out) + + +class TestMinMax: + @pytest.mark.parametrize( + "raw_data,max_expected,min_expected", + [ + (np.arange(5.0), [4], [0]), + (-np.arange(5.0), [0], [-4]), + (np.array([0, 1, 2, np.nan, 4]), [4], [0]), + (np.array([np.nan] * 5), [np.nan], [np.nan]), + (np.array([]), [np.nan], [np.nan]), + ], + ) + def test_nan_fill_value(self, raw_data, max_expected, min_expected): + arr = SparseArray(raw_data) + max_result = arr.max() + min_result = arr.min() + assert max_result in max_expected + assert min_result in min_expected + + max_result = arr.max(skipna=False) + min_result = arr.min(skipna=False) + if np.isnan(raw_data).any(): + assert np.isnan(max_result) + assert np.isnan(min_result) + else: + assert max_result in max_expected + assert min_result in min_expected + + @pytest.mark.parametrize( + "fill_value,max_expected,min_expected", + [ + (100, 100, 0), + (-100, 1, -100), + ], + ) + def test_fill_value(self, fill_value, max_expected, min_expected): + arr = SparseArray( + np.array([fill_value, 0, 1]), dtype=SparseDtype("int", fill_value) + ) + max_result = arr.max() + assert max_result == max_expected + + min_result = arr.min() + assert min_result == min_expected + + def test_only_fill_value(self): + fv = 100 + arr = SparseArray(np.array([fv, fv, fv]), dtype=SparseDtype("int", fv)) + assert len(arr._valid_sp_values) == 0 + + assert arr.max() == fv + assert arr.min() == fv + assert arr.max(skipna=False) == fv + assert arr.min(skipna=False) == fv + + @pytest.mark.parametrize("func", ["min", "max"]) + @pytest.mark.parametrize("data", [np.array([]), np.array([np.nan, np.nan])]) + @pytest.mark.parametrize( + "dtype,expected", + [ + (SparseDtype(np.float64, np.nan), np.nan), + (SparseDtype(np.float64, 5.0), np.nan), + (SparseDtype("datetime64[ns]", NaT), NaT), + (SparseDtype("datetime64[ns]", Timestamp("2018-05-05")), NaT), + ], + ) + def test_na_value_if_no_valid_values(self, func, data, dtype, expected): + arr = SparseArray(data, dtype=dtype) + result = getattr(arr, func)() + if expected is NaT: + # TODO: pin down whether we wrap datetime64("NaT") + assert result is NaT or np.isnat(result) + else: + assert np.isnan(result) diff --git a/pandas/tests/arrays/sparse/test_unary.py b/pandas/tests/arrays/sparse/test_unary.py new file mode 100644 index 0000000000000..a99dbb10a1433 --- /dev/null +++ b/pandas/tests/arrays/sparse/test_unary.py @@ -0,0 +1,72 @@ +import operator + +import numpy as np +import pytest + +import pandas as pd +import pandas._testing as tm +from pandas.core.arrays import SparseArray + + +@pytest.mark.parametrize("fill_value", [0, np.nan]) +@pytest.mark.parametrize("op", [operator.pos, operator.neg]) +def test_unary_op(op, fill_value): + arr = np.array([0, 1, np.nan, 2]) + sparray = SparseArray(arr, fill_value=fill_value) + result = op(sparray) + expected = SparseArray(op(arr), fill_value=op(fill_value)) + tm.assert_sp_array_equal(result, expected) + + +@pytest.mark.parametrize("fill_value", [True, False]) +def test_invert(fill_value): + arr = np.array([True, False, False, True]) + sparray = SparseArray(arr, fill_value=fill_value) + result = ~sparray + expected = SparseArray(~arr, fill_value=not fill_value) + tm.assert_sp_array_equal(result, expected) + + result = ~pd.Series(sparray) + expected = pd.Series(expected) + tm.assert_series_equal(result, expected) + + result = ~pd.DataFrame({"A": sparray}) + expected = pd.DataFrame({"A": expected}) + tm.assert_frame_equal(result, expected) + + +class TestUnaryMethods: + def test_neg_operator(self): + arr = SparseArray([-1, -2, np.nan, 3], fill_value=np.nan, dtype=np.int8) + res = -arr + exp = SparseArray([1, 2, np.nan, -3], fill_value=np.nan, dtype=np.int8) + tm.assert_sp_array_equal(exp, res) + + arr = SparseArray([-1, -2, 1, 3], fill_value=-1, dtype=np.int8) + res = -arr + exp = SparseArray([1, 2, -1, -3], fill_value=1, dtype=np.int8) + tm.assert_sp_array_equal(exp, res) + + def test_abs_operator(self): + arr = SparseArray([-1, -2, np.nan, 3], fill_value=np.nan, dtype=np.int8) + res = abs(arr) + exp = SparseArray([1, 2, np.nan, 3], fill_value=np.nan, dtype=np.int8) + tm.assert_sp_array_equal(exp, res) + + arr = SparseArray([-1, -2, 1, 3], fill_value=-1, dtype=np.int8) + res = abs(arr) + exp = SparseArray([1, 2, 1, 3], fill_value=1, dtype=np.int8) + tm.assert_sp_array_equal(exp, res) + + def test_invert_operator(self): + arr = SparseArray([False, True, False, True], fill_value=False, dtype=np.bool8) + res = ~arr + exp = SparseArray( + np.invert([False, True, False, True]), fill_value=True, dtype=np.bool8 + ) + res = ~arr + tm.assert_sp_array_equal(exp, res) + + arr = SparseArray([0, 1, 0, 2, 3, 0], fill_value=0, dtype=np.int32) + res = ~arr + exp = SparseArray([-1, -2, -1, -3, -4, -1], fill_value=-1, dtype=np.int32) diff --git a/pandas/tests/arrays/string_/test_string.py b/pandas/tests/arrays/string_/test_string.py index afeeee3d02f9d..8b2aea5c2e2e1 100644 --- a/pandas/tests/arrays/string_/test_string.py +++ b/pandas/tests/arrays/string_/test_string.py @@ -554,7 +554,7 @@ def test_to_numpy_na_value(dtype, nulls_fixture): tm.assert_numpy_array_equal(result, expected) -def test_isin(dtype, request, fixed_now_ts): +def test_isin(dtype, fixed_now_ts): s = pd.Series(["a", "b", None], dtype=dtype) result = s.isin(["a", "c"]) diff --git a/pandas/tests/base/test_misc.py b/pandas/tests/base/test_misc.py index 72fb9a9d6b7a2..2a2cf12e0d51c 100644 --- a/pandas/tests/base/test_misc.py +++ b/pandas/tests/base/test_misc.py @@ -148,14 +148,18 @@ def test_memory_usage_components_narrow_series(dtype): assert total_usage == non_index_usage + index_usage -def test_searchsorted(index_or_series_obj): +def test_searchsorted(request, index_or_series_obj): # numpy.searchsorted calls obj.searchsorted under the hood. # See gh-12238 obj = index_or_series_obj if isinstance(obj, pd.MultiIndex): # See gh-14833 - pytest.skip("np.searchsorted doesn't work on pd.MultiIndex") + request.node.add_marker( + pytest.mark.xfail( + reason="np.searchsorted doesn't work on pd.MultiIndex: GH 14833" + ) + ) max_obj = max(obj, default=0) index = np.searchsorted(obj, max_obj) diff --git a/pandas/tests/computation/test_eval.py b/pandas/tests/computation/test_eval.py index bf74e11ae247a..b17ea7ff4a0a9 100644 --- a/pandas/tests/computation/test_eval.py +++ b/pandas/tests/computation/test_eval.py @@ -631,30 +631,34 @@ def test_scalar_unary(self): def test_unary_in_array(self): # GH 11235 - tm.assert_numpy_array_equal( + # TODO: 2022-01-29: result return list with numexpr 2.7.3 in CI + # but cannot reproduce locally + result = np.array( pd.eval( "[-True, True, ~True, +True," "-False, False, ~False, +False," "-37, 37, ~37, +37]" ), - np.array( - [ - -True, - True, - ~True, - +True, - -False, - False, - ~False, - +False, - -37, - 37, - ~37, - +37, - ], - dtype=np.object_, - ), + dtype=np.object_, + ) + expected = np.array( + [ + -True, + True, + ~True, + +True, + -False, + False, + ~False, + +False, + -37, + 37, + ~37, + +37, + ], + dtype=np.object_, ) + tm.assert_numpy_array_equal(result, expected) @pytest.mark.parametrize("dtype", [np.float32, np.float64]) def test_float_comparison_bin_op(self, dtype): @@ -1297,9 +1301,12 @@ def test_column_in(self): df = DataFrame({"a": [11], "b": [-32]}) result = df.eval("a in [11, -32]") expected = Series([True]) - tm.assert_series_equal(result, expected) + # TODO: 2022-01-29: Name check failed with numexpr 2.7.3 in CI + # but cannot reproduce locally + tm.assert_series_equal(result, expected, check_names=False) - def assignment_not_inplace(self): + @pytest.mark.xfail(reason="Unknown: Omitted test_ in name prior.") + def test_assignment_not_inplace(self): # see gh-9297 df = DataFrame(np.random.randn(5, 2), columns=list("ab")) diff --git a/pandas/tests/config/test_config.py b/pandas/tests/config/test_config.py index 761c8535e6b4a..cc394bbb23d00 100644 --- a/pandas/tests/config/test_config.py +++ b/pandas/tests/config/test_config.py @@ -18,7 +18,7 @@ def setup_class(cls): cls.do = deepcopy(getattr(cls.cf, "_deprecated_options")) cls.ro = deepcopy(getattr(cls.cf, "_registered_options")) - def setup_method(self, method): + def setup_method(self): setattr(self.cf, "_global_config", {}) setattr(self.cf, "options", self.cf.DictWrapper(self.cf._global_config)) setattr(self.cf, "_deprecated_options", {}) @@ -30,7 +30,7 @@ def setup_method(self, method): # "chained_assignment" option, so re-register it. self.cf.register_option("chained_assignment", "raise") - def teardown_method(self, method): + def teardown_method(self): setattr(self.cf, "_global_config", self.gc) setattr(self.cf, "_deprecated_options", self.do) setattr(self.cf, "_registered_options", self.ro) diff --git a/pandas/tests/dtypes/cast/test_promote.py b/pandas/tests/dtypes/cast/test_promote.py index a514a9ce9b0e4..02bd03f5ea266 100644 --- a/pandas/tests/dtypes/cast/test_promote.py +++ b/pandas/tests/dtypes/cast/test_promote.py @@ -348,7 +348,7 @@ def test_maybe_promote_bytes_with_any(bytes_dtype, any_numpy_dtype_reduced): _check_promote(dtype, fill_value, expected_dtype, exp_val_for_scalar) -def test_maybe_promote_any_with_bytes(any_numpy_dtype_reduced, bytes_dtype): +def test_maybe_promote_any_with_bytes(any_numpy_dtype_reduced): dtype = np.dtype(any_numpy_dtype_reduced) # create array of given dtype @@ -391,9 +391,7 @@ def test_maybe_promote_datetime64_with_any(datetime64_dtype, any_numpy_dtype_red ], ids=["pd.Timestamp", "np.datetime64", "datetime.datetime", "datetime.date"], ) -def test_maybe_promote_any_with_datetime64( - any_numpy_dtype_reduced, datetime64_dtype, fill_value -): +def test_maybe_promote_any_with_datetime64(any_numpy_dtype_reduced, fill_value): dtype = np.dtype(any_numpy_dtype_reduced) # filling datetime with anything but datetime casts to object @@ -465,9 +463,7 @@ def test_maybe_promote_timedelta64_with_any(timedelta64_dtype, any_numpy_dtype_r [pd.Timedelta(days=1), np.timedelta64(24, "h"), datetime.timedelta(1)], ids=["pd.Timedelta", "np.timedelta64", "datetime.timedelta"], ) -def test_maybe_promote_any_with_timedelta64( - any_numpy_dtype_reduced, timedelta64_dtype, fill_value -): +def test_maybe_promote_any_with_timedelta64(any_numpy_dtype_reduced, fill_value): dtype = np.dtype(any_numpy_dtype_reduced) # filling anything but timedelta with timedelta casts to object @@ -496,7 +492,7 @@ def test_maybe_promote_string_with_any(string_dtype, any_numpy_dtype_reduced): _check_promote(dtype, fill_value, expected_dtype, exp_val_for_scalar) -def test_maybe_promote_any_with_string(any_numpy_dtype_reduced, string_dtype): +def test_maybe_promote_any_with_string(any_numpy_dtype_reduced): dtype = np.dtype(any_numpy_dtype_reduced) # create array of given dtype @@ -523,7 +519,7 @@ def test_maybe_promote_object_with_any(object_dtype, any_numpy_dtype_reduced): _check_promote(dtype, fill_value, expected_dtype, exp_val_for_scalar) -def test_maybe_promote_any_with_object(any_numpy_dtype_reduced, object_dtype): +def test_maybe_promote_any_with_object(any_numpy_dtype_reduced): dtype = np.dtype(any_numpy_dtype_reduced) # create array of object dtype from a scalar value (i.e. passing diff --git a/pandas/tests/dtypes/test_common.py b/pandas/tests/dtypes/test_common.py index 165873186aa5a..a32b37fbdd71b 100644 --- a/pandas/tests/dtypes/test_common.py +++ b/pandas/tests/dtypes/test_common.py @@ -562,12 +562,14 @@ def test_is_bool_dtype(): assert not com.is_bool_dtype(int) assert not com.is_bool_dtype(str) assert not com.is_bool_dtype(pd.Series([1, 2])) + assert not com.is_bool_dtype(pd.Series(["a", "b"], dtype="category")) assert not com.is_bool_dtype(np.array(["a", "b"])) assert not com.is_bool_dtype(pd.Index(["a", "b"])) assert not com.is_bool_dtype("Int64") assert com.is_bool_dtype(bool) assert com.is_bool_dtype(np.bool_) + assert com.is_bool_dtype(pd.Series([True, False], dtype="category")) assert com.is_bool_dtype(np.array([True, False])) assert com.is_bool_dtype(pd.Index([True, False])) diff --git a/pandas/tests/dtypes/test_dtypes.py b/pandas/tests/dtypes/test_dtypes.py index 30447de874aaa..f077317e7ebbe 100644 --- a/pandas/tests/dtypes/test_dtypes.py +++ b/pandas/tests/dtypes/test_dtypes.py @@ -848,7 +848,7 @@ def test_categories(self): tm.assert_index_equal(result.categories, pd.Index(["a", "b", "c"])) assert result.ordered is False - def test_equal_but_different(self, ordered): + def test_equal_but_different(self): c1 = CategoricalDtype([1, 2, 3]) c2 = CategoricalDtype([1.0, 2.0, 3.0]) assert c1 is not c2 diff --git a/pandas/tests/extension/base/setitem.py b/pandas/tests/extension/base/setitem.py index 0de9757668e1e..c5f10e0439e47 100644 --- a/pandas/tests/extension/base/setitem.py +++ b/pandas/tests/extension/base/setitem.py @@ -364,7 +364,7 @@ def test_setitem_series(self, data, full_indexer): ) self.assert_series_equal(result, expected) - def test_setitem_frame_2d_values(self, data, request): + def test_setitem_frame_2d_values(self, data): # GH#44514 df = pd.DataFrame({"A": data}) diff --git a/pandas/tests/extension/test_sparse.py b/pandas/tests/extension/test_sparse.py index 4f453986ad2c3..dda067ac01e9b 100644 --- a/pandas/tests/extension/test_sparse.py +++ b/pandas/tests/extension/test_sparse.py @@ -54,7 +54,7 @@ def data(request): @pytest.fixture -def data_for_twos(request): +def data_for_twos(): return SparseArray(np.ones(100) * 2) @@ -293,14 +293,6 @@ def test_fillna_frame(self, data_missing): class TestMethods(BaseSparseTests, base.BaseMethodsTests): - @pytest.mark.parametrize("ascending", [True, False]) - def test_sort_values_frame(self, data_for_sorting, ascending): - msg = "will store that array directly" - with tm.assert_produces_warning( - FutureWarning, match=msg, check_stacklevel=False - ): - super().test_sort_values_frame(data_for_sorting, ascending) - def test_combine_le(self, data_repeated): # We return a Series[SparseArray].__le__ returns a # Series[Sparse[bool]] @@ -453,7 +445,7 @@ def _skip_if_different_combine(self, data): # arith ops call on dtype.fill_value so that the sparsity # is maintained. Combine can't be called on a dtype in # general, so we can't make the expected. This is tested elsewhere - raise pytest.skip("Incorrected expected from Series.combine") + pytest.skip("Incorrected expected from Series.combine and tested elsewhere") def test_arith_series_with_scalar(self, data, all_arithmetic_operators): self._skip_if_different_combine(data) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 6c438a123c209..fda37fdedb92a 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -397,7 +397,7 @@ def test_setitem_frame_length_0_str_key(self, indexer): expected["A"] = expected["A"].astype("object") tm.assert_frame_equal(df, expected) - def test_setitem_frame_duplicate_columns(self, using_array_manager, request): + def test_setitem_frame_duplicate_columns(self, using_array_manager): # GH#15695 warn = FutureWarning if using_array_manager else None msg = "will attempt to set the values inplace" @@ -1105,7 +1105,7 @@ def test_setitem_duplicate_columns_not_inplace(self): @pytest.mark.parametrize( "value", [1, np.array([[1], [1]], dtype="int64"), [[1], [1]]] ) - def test_setitem_same_dtype_not_inplace(self, value, using_array_manager, request): + def test_setitem_same_dtype_not_inplace(self, value, using_array_manager): # GH#39510 cols = ["A", "B"] df = DataFrame(0, index=[0, 1], columns=cols) diff --git a/pandas/tests/frame/indexing/test_where.py b/pandas/tests/frame/indexing/test_where.py index 5bace91cce22a..cf193b2aaf90a 100644 --- a/pandas/tests/frame/indexing/test_where.py +++ b/pandas/tests/frame/indexing/test_where.py @@ -141,11 +141,7 @@ def _check_align(df, cond, other, check_dtypes=True): # check other is ndarray cond = df > 0 - warn = None - if df is mixed_int_frame: - warn = FutureWarning - with tm.assert_produces_warning(warn, match="Downcasting integer-dtype"): - _check_align(df, cond, (_safe_add(df).values)) + _check_align(df, cond, (_safe_add(df).values)) # integers are upcast, so don't check the dtypes cond = df > 0 @@ -473,44 +469,43 @@ def test_where_axis(self, using_array_manager): # GH 9736 df = DataFrame(np.random.randn(2, 2)) mask = DataFrame([[False, False], [False, False]]) - s = Series([0, 1]) + ser = Series([0, 1]) expected = DataFrame([[0, 0], [1, 1]], dtype="float64") - result = df.where(mask, s, axis="index") + result = df.where(mask, ser, axis="index") tm.assert_frame_equal(result, expected) result = df.copy() - return_value = result.where(mask, s, axis="index", inplace=True) + return_value = result.where(mask, ser, axis="index", inplace=True) assert return_value is None tm.assert_frame_equal(result, expected) expected = DataFrame([[0, 1], [0, 1]], dtype="float64") - result = df.where(mask, s, axis="columns") + result = df.where(mask, ser, axis="columns") tm.assert_frame_equal(result, expected) result = df.copy() - return_value = result.where(mask, s, axis="columns", inplace=True) + return_value = result.where(mask, ser, axis="columns", inplace=True) assert return_value is None tm.assert_frame_equal(result, expected) + def test_where_axis_with_upcast(self): # Upcast needed df = DataFrame([[1, 2], [3, 4]], dtype="int64") mask = DataFrame([[False, False], [False, False]]) - s = Series([0, np.nan]) + ser = Series([0, np.nan]) expected = DataFrame([[0, 0], [np.nan, np.nan]], dtype="float64") - result = df.where(mask, s, axis="index") + result = df.where(mask, ser, axis="index") tm.assert_frame_equal(result, expected) result = df.copy() - return_value = result.where(mask, s, axis="index", inplace=True) + return_value = result.where(mask, ser, axis="index", inplace=True) assert return_value is None tm.assert_frame_equal(result, expected) - warn = FutureWarning if using_array_manager else None expected = DataFrame([[0, np.nan], [0, np.nan]]) - with tm.assert_produces_warning(warn, match="Downcasting integer-dtype"): - result = df.where(mask, s, axis="columns") + result = df.where(mask, ser, axis="columns") tm.assert_frame_equal(result, expected) expected = DataFrame( @@ -520,7 +515,7 @@ def test_where_axis(self, using_array_manager): } ) result = df.copy() - return_value = result.where(mask, s, axis="columns", inplace=True) + return_value = result.where(mask, ser, axis="columns", inplace=True) assert return_value is None tm.assert_frame_equal(result, expected) diff --git a/pandas/tests/frame/methods/test_clip.py b/pandas/tests/frame/methods/test_clip.py index e692948c92a26..c851e65a7ad4f 100644 --- a/pandas/tests/frame/methods/test_clip.py +++ b/pandas/tests/frame/methods/test_clip.py @@ -136,7 +136,7 @@ def test_clip_against_unordered_columns(self): tm.assert_frame_equal(result_lower, expected_lower) tm.assert_frame_equal(result_lower_upper, expected_lower_upper) - def test_clip_with_na_args(self, float_frame, using_array_manager): + def test_clip_with_na_args(self, float_frame): """Should process np.nan argument as None""" # GH#17276 tm.assert_frame_equal(float_frame.clip(np.nan), float_frame) @@ -151,9 +151,7 @@ def test_clip_with_na_args(self, float_frame, using_array_manager): ) tm.assert_frame_equal(result, expected) - warn = FutureWarning if using_array_manager else None - with tm.assert_produces_warning(warn, match="Downcasting integer-dtype"): - result = df.clip(lower=[4, 5, np.nan], axis=1) + result = df.clip(lower=[4, 5, np.nan], axis=1) expected = DataFrame( {"col_0": [4, 4, 4], "col_1": [5, 5, 6], "col_2": [7, 8, 9]} ) diff --git a/pandas/tests/frame/methods/test_fillna.py b/pandas/tests/frame/methods/test_fillna.py index 21a45d9ee1f20..77ae9fb4c7eff 100644 --- a/pandas/tests/frame/methods/test_fillna.py +++ b/pandas/tests/frame/methods/test_fillna.py @@ -250,6 +250,25 @@ def test_fillna_downcast_false(self, frame_or_series): result = obj.fillna("", downcast=False) tm.assert_equal(result, obj) + def test_fillna_downcast_noop(self, frame_or_series): + # GH#45423 + # Two relevant paths: + # 1) not _can_hold_na (e.g. integer) + # 2) _can_hold_na + noop + not can_hold_element + + obj = frame_or_series([1, 2, 3], dtype=np.int64) + res = obj.fillna("foo", downcast=np.dtype(np.int32)) + expected = obj.astype(np.int32) + tm.assert_equal(res, expected) + + obj2 = obj.astype(np.float64) + res2 = obj2.fillna("foo", downcast="infer") + expected2 = obj # get back int64 + tm.assert_equal(res2, expected2) + + res3 = obj2.fillna("foo", downcast=np.dtype(np.int32)) + tm.assert_equal(res3, expected) + @pytest.mark.parametrize("columns", [["A", "A", "B"], ["A", "A"]]) def test_fillna_dictlike_value_duplicate_colnames(self, columns): # GH#43476 diff --git a/pandas/tests/frame/methods/test_interpolate.py b/pandas/tests/frame/methods/test_interpolate.py index 37fb0754baffd..6566d426d9a6b 100644 --- a/pandas/tests/frame/methods/test_interpolate.py +++ b/pandas/tests/frame/methods/test_interpolate.py @@ -320,7 +320,7 @@ def test_interp_ignore_all_good(self): result = df[["B", "D"]].interpolate(downcast=None) tm.assert_frame_equal(result, df[["B", "D"]]) - def test_interp_time_inplace_axis(self, axis): + def test_interp_time_inplace_axis(self): # GH 9687 periods = 5 idx = date_range(start="2014-01-01", periods=periods) diff --git a/pandas/tests/frame/methods/test_quantile.py b/pandas/tests/frame/methods/test_quantile.py index 2712ae04845e5..63407ba47c50e 100644 --- a/pandas/tests/frame/methods/test_quantile.py +++ b/pandas/tests/frame/methods/test_quantile.py @@ -673,13 +673,9 @@ def test_quantile_ea_with_na(self, obj, index): # TODO(GH#39763): filtering can be removed after GH#39763 is fixed @pytest.mark.filterwarnings("ignore:Using .astype to convert:FutureWarning") - def test_quantile_ea_all_na(self, obj, index, frame_or_series, request): - warn = None - # if using_array_manager and frame_or_series is DataFrame: - # warn = FutureWarning - + def test_quantile_ea_all_na(self, obj, index): msg = "will attempt to set the values inplace" - with tm.assert_produces_warning(warn, match=msg): + with tm.assert_produces_warning(FutureWarning, match=msg): obj.iloc[:] = index._na_value # TODO(ArrayManager): this casting should be unnecessary after GH#39763 is fixed diff --git a/pandas/tests/frame/methods/test_reset_index.py b/pandas/tests/frame/methods/test_reset_index.py index 8130c4fa41c12..7db72d9e35a30 100644 --- a/pandas/tests/frame/methods/test_reset_index.py +++ b/pandas/tests/frame/methods/test_reset_index.py @@ -27,6 +27,12 @@ import pandas._testing as tm +@pytest.fixture() +def multiindex_df(): + levels = [["A", ""], ["B", "b"]] + return DataFrame([[0, 2], [1, 3]], columns=MultiIndex.from_tuples(levels)) + + class TestResetIndex: def test_reset_index_empty_rangeindex(self): # GH#45230 @@ -381,33 +387,31 @@ def test_reset_index_range(self): ) tm.assert_frame_equal(result, expected) - def test_reset_index_multiindex_columns(self): - levels = [["A", ""], ["B", "b"]] - df = DataFrame([[0, 2], [1, 3]], columns=MultiIndex.from_tuples(levels)) - result = df[["B"]].rename_axis("A").reset_index() - tm.assert_frame_equal(result, df) + def test_reset_index_multiindex_columns(self, multiindex_df): + result = multiindex_df[["B"]].rename_axis("A").reset_index() + tm.assert_frame_equal(result, multiindex_df) # GH#16120: already existing column msg = r"cannot insert \('A', ''\), already exists" with pytest.raises(ValueError, match=msg): - df.rename_axis("A").reset_index() + multiindex_df.rename_axis("A").reset_index() # GH#16164: multiindex (tuple) full key - result = df.set_index([("A", "")]).reset_index() - tm.assert_frame_equal(result, df) + result = multiindex_df.set_index([("A", "")]).reset_index() + tm.assert_frame_equal(result, multiindex_df) # with additional (unnamed) index level idx_col = DataFrame( [[0], [1]], columns=MultiIndex.from_tuples([("level_0", "")]) ) - expected = pd.concat([idx_col, df[[("B", "b"), ("A", "")]]], axis=1) - result = df.set_index([("B", "b")], append=True).reset_index() + expected = pd.concat([idx_col, multiindex_df[[("B", "b"), ("A", "")]]], axis=1) + result = multiindex_df.set_index([("B", "b")], append=True).reset_index() tm.assert_frame_equal(result, expected) # with index name which is a too long tuple... msg = "Item must have length equal to number of levels." with pytest.raises(ValueError, match=msg): - df.rename_axis([("C", "c", "i")]).reset_index() + multiindex_df.rename_axis([("C", "c", "i")]).reset_index() # or too short... levels = [["A", "a", ""], ["B", "b", "i"]] @@ -433,6 +437,45 @@ def test_reset_index_multiindex_columns(self): result = df2.rename_axis([("c", "ii")]).reset_index(col_level=1, col_fill="C") tm.assert_frame_equal(result, expected) + @pytest.mark.parametrize("flag", [False, True]) + @pytest.mark.parametrize("allow_duplicates", [False, True]) + def test_reset_index_duplicate_columns_allow( + self, multiindex_df, flag, allow_duplicates + ): + # GH#44755 reset_index with duplicate column labels + df = multiindex_df.rename_axis("A") + df = df.set_flags(allows_duplicate_labels=flag) + + if flag and allow_duplicates: + result = df.reset_index(allow_duplicates=allow_duplicates) + levels = [["A", ""], ["A", ""], ["B", "b"]] + expected = DataFrame( + [[0, 0, 2], [1, 1, 3]], columns=MultiIndex.from_tuples(levels) + ) + tm.assert_frame_equal(result, expected) + else: + if not flag and allow_duplicates: + msg = "Cannot specify 'allow_duplicates=True' when " + "'self.flags.allows_duplicate_labels' is False" + else: + msg = r"cannot insert \('A', ''\), already exists" + with pytest.raises(ValueError, match=msg): + df.reset_index(allow_duplicates=allow_duplicates) + + @pytest.mark.parametrize("flag", [False, True]) + def test_reset_index_duplicate_columns_default(self, multiindex_df, flag): + df = multiindex_df.rename_axis("A") + df = df.set_flags(allows_duplicate_labels=flag) + + msg = r"cannot insert \('A', ''\), already exists" + with pytest.raises(ValueError, match=msg): + df.reset_index() + + @pytest.mark.parametrize("allow_duplicates", ["bad value"]) + def test_reset_index_allow_duplicates_check(self, multiindex_df, allow_duplicates): + with pytest.raises(ValueError, match="expected type bool"): + multiindex_df.reset_index(allow_duplicates=allow_duplicates) + @pytest.mark.filterwarnings("ignore:Timestamp.freq is deprecated:FutureWarning") def test_reset_index_datetime(self, tz_naive_fixture): # GH#3950 diff --git a/pandas/tests/frame/methods/test_shift.py b/pandas/tests/frame/methods/test_shift.py index f5e0d0727764e..2b7b0159c9f88 100644 --- a/pandas/tests/frame/methods/test_shift.py +++ b/pandas/tests/frame/methods/test_shift.py @@ -617,14 +617,8 @@ def test_shift_dt64values_int_fill_deprecated(self): ) # TODO(2.0): remove filtering @pytest.mark.filterwarnings("ignore:Index.ravel.*:FutureWarning") - def test_shift_dt64values_axis1_invalid_fill( - self, vals, as_cat, using_array_manager, request - ): + def test_shift_dt64values_axis1_invalid_fill(self, vals, as_cat, request): # GH#44564 - if using_array_manager: - mark = pytest.mark.xfail(raises=NotImplementedError) - request.node.add_marker(mark) - ser = Series(vals) if as_cat: ser = ser.astype("category") @@ -671,7 +665,6 @@ def test_shift_axis1_categorical_columns(self): ) tm.assert_frame_equal(result, expected) - @td.skip_array_manager_not_yet_implemented def test_shift_axis1_many_periods(self): # GH#44978 periods > len(columns) df = DataFrame(np.random.rand(5, 3)) diff --git a/pandas/tests/frame/methods/test_sort_values.py b/pandas/tests/frame/methods/test_sort_values.py index 0a05712489147..9f3fcb1db546d 100644 --- a/pandas/tests/frame/methods/test_sort_values.py +++ b/pandas/tests/frame/methods/test_sort_values.py @@ -15,6 +15,16 @@ class TestDataFrameSortValues: + def test_sort_values_sparse_no_warning(self): + # GH#45618 + # TODO(2.0): test will be unnecessary + ser = pd.Series(Categorical(["a", "b", "a"], categories=["a", "b", "c"])) + df = pd.get_dummies(ser, sparse=True) + + with tm.assert_produces_warning(None): + # No warnings about constructing Index from SparseArray + df.sort_values(by=df.columns.tolist()) + def test_sort_values(self): frame = DataFrame( [[1, 1, 2], [3, 1, 0], [4, 5, 6]], index=[1, 2, 3], columns=list("ABC") diff --git a/pandas/tests/frame/methods/test_tz_convert.py b/pandas/tests/frame/methods/test_tz_convert.py index bb9ea64d5f326..c5f6870769afc 100644 --- a/pandas/tests/frame/methods/test_tz_convert.py +++ b/pandas/tests/frame/methods/test_tz_convert.py @@ -104,17 +104,17 @@ def test_tz_convert_and_localize(self, fn): # Not DatetimeIndex / PeriodIndex with pytest.raises(TypeError, match="DatetimeIndex"): df = DataFrame(index=int_idx) - df = getattr(df, fn)("US/Pacific") + getattr(df, fn)("US/Pacific") # Not DatetimeIndex / PeriodIndex with pytest.raises(TypeError, match="DatetimeIndex"): df = DataFrame(np.ones(5), MultiIndex.from_arrays([int_idx, l0])) - df = getattr(df, fn)("US/Pacific", level=0) + getattr(df, fn)("US/Pacific", level=0) # Invalid level with pytest.raises(ValueError, match="not valid"): df = DataFrame(index=l0) - df = getattr(df, fn)("US/Pacific", level=1) + getattr(df, fn)("US/Pacific", level=1) @pytest.mark.parametrize("copy", [True, False]) def test_tz_convert_copy_inplace_mutate(self, copy, frame_or_series): diff --git a/pandas/tests/frame/test_query_eval.py b/pandas/tests/frame/test_query_eval.py index 558ba0424e481..842ff172c34c4 100644 --- a/pandas/tests/frame/test_query_eval.py +++ b/pandas/tests/frame/test_query_eval.py @@ -36,7 +36,7 @@ def skip_if_no_pandas_parser(parser): class TestCompat: - def setup_method(self, method): + def setup_method(self): self.df = DataFrame({"A": [1, 2, 3]}) self.expected1 = self.df[self.df.A > 0] self.expected2 = self.df.A + 1 @@ -1090,10 +1090,10 @@ def test_query_string_scalar_variable(self, parser, engine): class TestDataFrameEvalWithFrame: - def setup_method(self, method): + def setup_method(self): self.frame = DataFrame(np.random.randn(10, 3), columns=list("abc")) - def teardown_method(self, method): + def teardown_method(self): del self.frame def test_simple_expr(self, parser, engine): diff --git a/pandas/tests/frame/test_reductions.py b/pandas/tests/frame/test_reductions.py index af62ea7c96653..8da7cf55c4f19 100644 --- a/pandas/tests/frame/test_reductions.py +++ b/pandas/tests/frame/test_reductions.py @@ -1471,9 +1471,15 @@ def test_reductions_deprecation_level_argument( with tm.assert_produces_warning(FutureWarning, match="level"): getattr(obj, reduction_functions)(level=0) - def test_reductions_skipna_none_raises(self, frame_or_series, reduction_functions): - if reduction_functions in ["count", "mad"]: - pytest.skip("Count does not accept skipna. Mad needs a deprecation cycle.") + def test_reductions_skipna_none_raises( + self, request, frame_or_series, reduction_functions + ): + if reduction_functions == "count": + request.node.add_marker( + pytest.mark.xfail(reason="Count does not accept skipna") + ) + elif reduction_functions == "mad": + pytest.skip("Mad needs a deprecation cycle: GH 11787") obj = frame_or_series([1, 2, 3]) msg = 'For argument "skipna" expected type bool, received type NoneType.' with pytest.raises(ValueError, match=msg): diff --git a/pandas/tests/frame/test_repr_info.py b/pandas/tests/frame/test_repr_info.py index f19edf5722ca1..765640c94673e 100644 --- a/pandas/tests/frame/test_repr_info.py +++ b/pandas/tests/frame/test_repr_info.py @@ -62,7 +62,7 @@ def test_assign_index_sequences(self): df.index = index repr(df) - def test_repr_with_mi_nat(self, float_string_frame): + def test_repr_with_mi_nat(self): df = DataFrame({"X": [1, 2]}, index=[[NaT, Timestamp("20130101")], ["a", "b"]]) result = repr(df) expected = " X\nNaT a 1\n2013-01-01 b 2" diff --git a/pandas/tests/frame/test_ufunc.py b/pandas/tests/frame/test_ufunc.py index 79e9b1f34978d..2a4b212d0acd7 100644 --- a/pandas/tests/frame/test_ufunc.py +++ b/pandas/tests/frame/test_ufunc.py @@ -81,7 +81,7 @@ def test_binary_input_dispatch_binop(dtype): ), ], ) -def test_ufunc_passes_args(func, arg, expected, request): +def test_ufunc_passes_args(func, arg, expected): # GH#40662 arr = np.array([[1, 2], [3, 4]]) df = pd.DataFrame(arr) diff --git a/pandas/tests/generic/test_duplicate_labels.py b/pandas/tests/generic/test_duplicate_labels.py index 43cd3039870d0..189c5382ef114 100644 --- a/pandas/tests/generic/test_duplicate_labels.py +++ b/pandas/tests/generic/test_duplicate_labels.py @@ -63,10 +63,9 @@ def test_preserved_frame(self): assert df.loc[["a"]].flags.allows_duplicate_labels is False assert df.loc[:, ["A", "B"]].flags.allows_duplicate_labels is False - @not_implemented def test_to_frame(self): - s = pd.Series(dtype=float).set_flags(allows_duplicate_labels=False) - assert s.to_frame().flags.allows_duplicate_labels is False + ser = pd.Series(dtype=float).set_flags(allows_duplicate_labels=False) + assert ser.to_frame().flags.allows_duplicate_labels is False @pytest.mark.parametrize("func", ["add", "sub"]) @pytest.mark.parametrize( diff --git a/pandas/tests/generic/test_finalize.py b/pandas/tests/generic/test_finalize.py index 403e5c6c7daf7..cf92cd55a720e 100644 --- a/pandas/tests/generic/test_finalize.py +++ b/pandas/tests/generic/test_finalize.py @@ -38,14 +38,9 @@ (pd.Series, ([0],), operator.methodcaller("take", [])), (pd.Series, ([0],), operator.methodcaller("__getitem__", [True])), (pd.Series, ([0],), operator.methodcaller("repeat", 2)), - pytest.param( - (pd.Series, ([0],), operator.methodcaller("reset_index")), - marks=pytest.mark.xfail, - ), + (pd.Series, ([0],), operator.methodcaller("reset_index")), (pd.Series, ([0],), operator.methodcaller("reset_index", drop=True)), - pytest.param( - (pd.Series, ([0],), operator.methodcaller("to_frame")), marks=pytest.mark.xfail - ), + (pd.Series, ([0],), operator.methodcaller("to_frame")), (pd.Series, ([0, 0],), operator.methodcaller("drop_duplicates")), (pd.Series, ([0, 0],), operator.methodcaller("duplicated")), (pd.Series, ([0, 0],), operator.methodcaller("round")), @@ -205,7 +200,6 @@ ), pytest.param( (pd.DataFrame, frame_data, operator.methodcaller("round", 2)), - marks=not_implemented_mark, ), pytest.param( (pd.DataFrame, frame_data, operator.methodcaller("corr")), @@ -228,12 +222,10 @@ ), pytest.param( (pd.DataFrame, frame_data, operator.methodcaller("count")), - marks=not_implemented_mark, ), pytest.param( (pd.DataFrame, frame_mi_data, operator.methodcaller("count", level="A")), marks=[ - not_implemented_mark, pytest.mark.filterwarnings("ignore:Using the level keyword:FutureWarning"), ], ), @@ -261,7 +253,6 @@ ), pytest.param( (pd.DataFrame, frame_data, operator.methodcaller("quantile", q=[0.25, 0.75])), - marks=not_implemented_mark, ), pytest.param( (pd.DataFrame, frame_data, operator.methodcaller("quantile")), @@ -279,11 +270,9 @@ ), pytest.param( (pd.DataFrame, frame_mi_data, operator.methodcaller("isin", [1])), - marks=not_implemented_mark, ), pytest.param( (pd.DataFrame, frame_mi_data, operator.methodcaller("isin", pd.Series([1]))), - marks=not_implemented_mark, ), pytest.param( ( @@ -291,7 +280,6 @@ frame_mi_data, operator.methodcaller("isin", pd.DataFrame({"A": [1]})), ), - marks=not_implemented_mark, ), (pd.DataFrame, frame_data, operator.methodcaller("swapaxes", 0, 1)), (pd.DataFrame, frame_mi_data, operator.methodcaller("droplevel", "A")), @@ -300,10 +288,7 @@ (pd.DataFrame, frame_data, operator.methodcaller("squeeze")), marks=not_implemented_mark, ), - pytest.param( - (pd.Series, ([1, 2],), operator.methodcaller("squeeze")) - # marks=not_implemented_mark, - ), + (pd.Series, ([1, 2],), operator.methodcaller("squeeze")), (pd.Series, ([1, 2],), operator.methodcaller("rename_axis", index="a")), (pd.DataFrame, frame_data, operator.methodcaller("rename_axis", columns="a")), # Unary ops @@ -315,7 +300,7 @@ (pd.Series, [1], operator.inv), (pd.DataFrame, frame_data, abs), (pd.Series, [1], abs), - pytest.param((pd.DataFrame, frame_data, round), marks=not_implemented_mark), + pytest.param((pd.DataFrame, frame_data, round)), (pd.Series, [1], round), (pd.DataFrame, frame_data, operator.methodcaller("take", [0, 0])), (pd.DataFrame, frame_mi_data, operator.methodcaller("xs", "a")), @@ -461,10 +446,7 @@ marks=not_implemented_mark, ), (pd.Series, ([1, 2],), operator.methodcaller("pct_change")), - pytest.param( - (pd.DataFrame, frame_data, operator.methodcaller("pct_change")), - marks=not_implemented_mark, - ), + (pd.DataFrame, frame_data, operator.methodcaller("pct_change")), (pd.Series, ([1],), operator.methodcaller("transform", lambda x: x - x.min())), pytest.param( ( diff --git a/pandas/tests/groupby/test_apply.py b/pandas/tests/groupby/test_apply.py index cfc4b8934622f..6c6812a25fcd9 100644 --- a/pandas/tests/groupby/test_apply.py +++ b/pandas/tests/groupby/test_apply.py @@ -241,7 +241,7 @@ def test_apply_with_mixed_dtype(): tm.assert_series_equal(result1, result2) -def test_groupby_as_index_apply(df): +def test_groupby_as_index_apply(): # GH #4648 and #3417 df = DataFrame( { diff --git a/pandas/tests/groupby/test_categorical.py b/pandas/tests/groupby/test_categorical.py index 3d5016b058c07..a33e4efbe3b6d 100644 --- a/pandas/tests/groupby/test_categorical.py +++ b/pandas/tests/groupby/test_categorical.py @@ -1447,7 +1447,7 @@ def test_dataframe_groupby_on_2_categoricals_when_observed_is_true(reduction_fun @pytest.mark.parametrize("observed", [False, None]) def test_dataframe_groupby_on_2_categoricals_when_observed_is_false( - reduction_func, observed, request + reduction_func, observed ): # GH 23865 # GH 27075 diff --git a/pandas/tests/groupby/test_groupby.py b/pandas/tests/groupby/test_groupby.py index 2da835737bad4..10bf1a3ef91f2 100644 --- a/pandas/tests/groupby/test_groupby.py +++ b/pandas/tests/groupby/test_groupby.py @@ -713,11 +713,8 @@ def test_ops_not_as_index(reduction_func): # GH 10355, 21090 # Using as_index=False should not modify grouped column - if reduction_func in ("corrwith",): - pytest.skip("Test not applicable") - - if reduction_func in ("nth", "ngroup"): - pytest.skip("Skip until behavior is determined (GH #5755)") + if reduction_func in ("corrwith", "nth", "ngroup"): + pytest.skip(f"GH 5755: Test not applicable for {reduction_func}") df = DataFrame(np.random.randint(0, 5, size=(100, 2)), columns=["a", "b"]) expected = getattr(df.groupby("a"), reduction_func)() @@ -821,7 +818,7 @@ def test_groupby_as_index_corner(df, ts): df.groupby(lambda x: x.lower(), as_index=False, axis=1) -def test_groupby_multiple_key(df): +def test_groupby_multiple_key(): df = tm.makeTimeDataFrame() grouped = df.groupby([lambda x: x.year, lambda x: x.month, lambda x: x.day]) agged = grouped.sum() @@ -2268,7 +2265,7 @@ def test_groupby_duplicate_index(): @pytest.mark.filterwarnings("ignore:tshift is deprecated:FutureWarning") def test_dup_labels_output_shape(groupby_func, idx): if groupby_func in {"size", "ngroup", "cumcount"}: - pytest.skip("Not applicable") + pytest.skip(f"Not applicable for {groupby_func}") # TODO(2.0) Remove after pad/backfill deprecation enforced groupby_func = maybe_normalize_deprecated_kernels(groupby_func) df = DataFrame([[1, 1]], columns=idx) diff --git a/pandas/tests/groupby/test_groupby_subclass.py b/pandas/tests/groupby/test_groupby_subclass.py index 6b1bc5f17c2a3..3f83bc06e6c38 100644 --- a/pandas/tests/groupby/test_groupby_subclass.py +++ b/pandas/tests/groupby/test_groupby_subclass.py @@ -24,7 +24,7 @@ def test_groupby_preserves_subclass(obj, groupby_func): # GH28330 -- preserve subclass through groupby operations if isinstance(obj, Series) and groupby_func in {"corrwith"}: - pytest.skip("Not applicable") + pytest.skip(f"Not applicable for Series and {groupby_func}") # TODO(2.0) Remove after pad/backfill deprecation enforced groupby_func = maybe_normalize_deprecated_kernels(groupby_func) grouped = obj.groupby(np.arange(0, 10)) diff --git a/pandas/tests/groupby/test_size.py b/pandas/tests/groupby/test_size.py index f87e4117f57fd..06f79ef609db1 100644 --- a/pandas/tests/groupby/test_size.py +++ b/pandas/tests/groupby/test_size.py @@ -20,7 +20,7 @@ def test_size(df, by): @pytest.mark.parametrize("by", ["A", "B", ["A", "B"]]) @pytest.mark.parametrize("sort", [True, False]) -def test_size_sort(df, sort, by): +def test_size_sort(sort, by): df = DataFrame(np.random.choice(20, (1000, 3)), columns=list("ABC")) left = df.groupby(by=by, sort=sort).size() right = df.groupby(by=by, sort=sort)["C"].apply(lambda a: a.shape[0]) diff --git a/pandas/tests/groupby/transform/test_transform.py b/pandas/tests/groupby/transform/test_transform.py index 12a25a1e61211..1dde70ebb4b1b 100644 --- a/pandas/tests/groupby/transform/test_transform.py +++ b/pandas/tests/groupby/transform/test_transform.py @@ -165,13 +165,9 @@ def test_transform_broadcast(tsframe, ts): assert_fp_equal(res.xs(idx), agged[idx]) -def test_transform_axis_1(request, transformation_func, using_array_manager): +def test_transform_axis_1(request, transformation_func): # GH 36308 - if using_array_manager and transformation_func == "pct_change": - # TODO(ArrayManager) column-wise shift - request.node.add_marker( - pytest.mark.xfail(reason="ArrayManager: shift axis=1 not yet implemented") - ) + # TODO(2.0) Remove after pad/backfill deprecation enforced transformation_func = maybe_normalize_deprecated_kernels(transformation_func) @@ -803,39 +799,29 @@ def test_transform_with_non_scalar_group(): @pytest.mark.parametrize( - "cols,exp,comp_func", + "cols,expected", [ - ("a", Series([1, 1, 1], name="a"), tm.assert_series_equal), + ("a", Series([1, 1, 1], name="a")), ( ["a", "c"], DataFrame({"a": [1, 1, 1], "c": [1, 1, 1]}), - tm.assert_frame_equal, ), ], ) @pytest.mark.parametrize("agg_func", ["count", "rank", "size"]) -def test_transform_numeric_ret(cols, exp, comp_func, agg_func, request): - if agg_func == "size" and isinstance(cols, list): - # https://github.com/pytest-dev/pytest/issues/6300 - # workaround to xfail fixture/param permutations - reason = "'size' transformation not supported with NDFrameGroupy" - request.node.add_marker(pytest.mark.xfail(reason=reason)) - - # GH 19200 +def test_transform_numeric_ret(cols, expected, agg_func): + # GH#19200 and GH#27469 df = DataFrame( {"a": date_range("2018-01-01", periods=3), "b": range(3), "c": range(7, 10)} ) - - warn = FutureWarning - if isinstance(exp, Series) or agg_func != "size": - warn = None - with tm.assert_produces_warning(warn, match="Dropping invalid columns"): - result = df.groupby("b")[cols].transform(agg_func) + result = df.groupby("b")[cols].transform(agg_func) if agg_func == "rank": - exp = exp.astype("float") - - comp_func(result, exp) + expected = expected.astype("float") + elif agg_func == "size" and cols == ["a", "c"]: + # transform("size") returns a Series + expected = expected["a"].rename(None) + tm.assert_equal(result, expected) def test_transform_ffill(): @@ -1131,27 +1117,19 @@ def test_transform_agg_by_name(request, reduction_func, obj): request.node.add_marker( pytest.mark.xfail(reason="TODO: g.transform('ngroup') doesn't work") ) - if func == "size" and obj.ndim == 2: # GH#27469 - request.node.add_marker( - pytest.mark.xfail(reason="TODO: g.transform('size') doesn't work") - ) if func == "corrwith" and isinstance(obj, Series): # GH#32293 request.node.add_marker( pytest.mark.xfail(reason="TODO: implement SeriesGroupBy.corrwith") ) args = {"nth": [0], "quantile": [0.5], "corrwith": [obj]}.get(func, []) - - warn = None - if isinstance(obj, DataFrame) and func == "size": - warn = FutureWarning - - with tm.assert_produces_warning(warn, match="Dropping invalid columns"): - result = g.transform(func, *args) + result = g.transform(func, *args) # this is the *definition* of a transformation tm.assert_index_equal(result.index, obj.index) - if hasattr(obj, "columns"): + + if func != "size" and obj.ndim == 2: + # size returns a Series, unlike other transforms tm.assert_index_equal(result.columns, obj.columns) # verify that values were broadcasted across each group diff --git a/pandas/tests/indexes/categorical/test_category.py b/pandas/tests/indexes/categorical/test_category.py index 2ae6ce99b4ee8..e06388e5d21ec 100644 --- a/pandas/tests/indexes/categorical/test_category.py +++ b/pandas/tests/indexes/categorical/test_category.py @@ -25,7 +25,7 @@ def simple_index(self) -> CategoricalIndex: return self._index_cls(list("aabbca"), categories=list("cab"), ordered=False) @pytest.fixture - def index(self, request): + def index(self): return tm.makeCategoricalIndex(100) def create_index(self, *, categories=None, ordered=False): diff --git a/pandas/tests/indexes/datetimes/test_setops.py b/pandas/tests/indexes/datetimes/test_setops.py index 7c2b3b7f4482d..4558fcccbb0e1 100644 --- a/pandas/tests/indexes/datetimes/test_setops.py +++ b/pandas/tests/indexes/datetimes/test_setops.py @@ -417,7 +417,7 @@ def test_intersection_non_tick_no_fastpath(self): class TestBusinessDatetimeIndex: - def setup_method(self, method): + def setup_method(self): self.rng = bdate_range(START, END) def test_union(self, sort): @@ -555,7 +555,7 @@ def test_intersection_duplicates(self, sort): class TestCustomDatetimeIndex: - def setup_method(self, method): + def setup_method(self): self.rng = bdate_range(START, END, freq="C") def test_union(self, sort): diff --git a/pandas/tests/indexes/multi/test_setops.py b/pandas/tests/indexes/multi/test_setops.py index 9f12d62155692..ea33c1178957e 100644 --- a/pandas/tests/indexes/multi/test_setops.py +++ b/pandas/tests/indexes/multi/test_setops.py @@ -368,7 +368,7 @@ def test_union_sort_other_empty(slice_): @pytest.mark.xfail(reason="Not implemented.") -def test_union_sort_other_empty_sort(slice_): +def test_union_sort_other_empty_sort(): # TODO(GH#25151): decide on True behaviour # # sort=True idx = MultiIndex.from_product([[1, 0], ["a", "b"]]) diff --git a/pandas/tests/indexes/object/test_astype.py b/pandas/tests/indexes/object/test_astype.py index 9bfc0c1312200..91e266e805868 100644 --- a/pandas/tests/indexes/object/test_astype.py +++ b/pandas/tests/indexes/object/test_astype.py @@ -1,4 +1,9 @@ -from pandas import Index +import pytest + +from pandas import ( + Index, + NaT, +) import pandas._testing as tm @@ -8,3 +13,12 @@ def test_astype_str_from_bytes(): result = idx.astype(str) expected = Index(["あ", "a"], dtype="object") tm.assert_index_equal(result, expected) + + +def test_astype_invalid_nas_to_tdt64_raises(): + # GH#45722 don't cast np.datetime64 NaTs to timedelta64 NaT + idx = Index([NaT.asm8] * 2, dtype=object) + + msg = r"Cannot cast Index to dtype timedelta64\[ns\]" + with pytest.raises(TypeError, match=msg): + idx.astype("m8[ns]") diff --git a/pandas/tests/indexes/test_base.py b/pandas/tests/indexes/test_base.py index 1145de14ad3c4..51840be14d320 100644 --- a/pandas/tests/indexes/test_base.py +++ b/pandas/tests/indexes/test_base.py @@ -452,7 +452,7 @@ def test_empty_fancy_raises(self, index): with pytest.raises(IndexError, match=msg): index[empty_farr] - def test_union_dt_as_obj(self, sort, simple_index): + def test_union_dt_as_obj(self, simple_index): # TODO: Replace with fixturesult index = simple_index date_index = date_range("2019-01-01", periods=10) @@ -792,7 +792,7 @@ def test_isin(self, values, index, expected): result = index.isin(values) tm.assert_numpy_array_equal(result, expected) - def test_isin_nan_common_object(self, request, nulls_fixture, nulls_fixture2): + def test_isin_nan_common_object(self, nulls_fixture, nulls_fixture2): # Test cartesian product of null fixtures and ensure that we don't # mangle the various types (save a corner case with PyPy) @@ -820,7 +820,7 @@ def test_isin_nan_common_object(self, request, nulls_fixture, nulls_fixture2): np.array([False, False]), ) - def test_isin_nan_common_float64(self, request, nulls_fixture): + def test_isin_nan_common_float64(self, nulls_fixture): if nulls_fixture is pd.NaT or nulls_fixture is pd.NA: # Check 1) that we cannot construct a Float64Index with this value diff --git a/pandas/tests/indexes/test_numpy_compat.py b/pandas/tests/indexes/test_numpy_compat.py index 3ee83160c1106..8f3ecce223afa 100644 --- a/pandas/tests/indexes/test_numpy_compat.py +++ b/pandas/tests/indexes/test_numpy_compat.py @@ -96,7 +96,7 @@ def test_numpy_ufuncs_basic(index, func): @pytest.mark.parametrize( "func", [np.isfinite, np.isinf, np.isnan, np.signbit], ids=lambda x: x.__name__ ) -def test_numpy_ufuncs_other(index, func, request): +def test_numpy_ufuncs_other(index, func): # test ufuncs of numpy, see: # https://numpy.org/doc/stable/reference/ufuncs.html if isinstance(index, (DatetimeIndex, TimedeltaIndex)): diff --git a/pandas/tests/indexes/test_setops.py b/pandas/tests/indexes/test_setops.py index a150a1f6d9494..bad75b7429efb 100644 --- a/pandas/tests/indexes/test_setops.py +++ b/pandas/tests/indexes/test_setops.py @@ -432,7 +432,7 @@ def test_difference_preserves_type_empty(self, index, sort): expected = index[:0] tm.assert_index_equal(result, expected, exact=True) - def test_difference_name_retention_equals(self, index, sort, names): + def test_difference_name_retention_equals(self, index, names): if isinstance(index, MultiIndex): names = [[x] * index.nlevels for x in names] index = index.rename(names[0]) diff --git a/pandas/tests/indexing/common.py b/pandas/tests/indexing/common.py index f8db005583bd8..ea9f2584196d3 100644 --- a/pandas/tests/indexing/common.py +++ b/pandas/tests/indexing/common.py @@ -43,7 +43,7 @@ class Base: "multi", } - def setup_method(self, method): + def setup_method(self): self.series_ints = Series(np.random.rand(4), index=np.arange(0, 8, 2)) self.frame_ints = DataFrame( diff --git a/pandas/tests/indexing/multiindex/test_sorted.py b/pandas/tests/indexing/multiindex/test_sorted.py index b6cdd0e19a94e..2214aaa9cfbdb 100644 --- a/pandas/tests/indexing/multiindex/test_sorted.py +++ b/pandas/tests/indexing/multiindex/test_sorted.py @@ -64,7 +64,7 @@ def test_frame_getitem_not_sorted2(self, key): assert result.index.is_monotonic_increasing tm.assert_frame_equal(result, expected) - def test_sort_values_key(self, multiindex_dataframe_random_data): + def test_sort_values_key(self): arrays = [ ["bar", "bar", "baz", "baz", "qux", "qux", "foo", "foo"], ["one", "two", "one", "two", "one", "two", "one", "two"], diff --git a/pandas/tests/indexing/test_categorical.py b/pandas/tests/indexing/test_categorical.py index 870043897e8e2..eb38edd920082 100644 --- a/pandas/tests/indexing/test_categorical.py +++ b/pandas/tests/indexing/test_categorical.py @@ -21,7 +21,7 @@ class TestCategoricalIndex: - def setup_method(self, method): + def setup_method(self): self.df = DataFrame( { diff --git a/pandas/tests/indexing/test_coercion.py b/pandas/tests/indexing/test_coercion.py index 7705ec9050aed..5ef079270479f 100644 --- a/pandas/tests/indexing/test_coercion.py +++ b/pandas/tests/indexing/test_coercion.py @@ -265,7 +265,7 @@ def test_insert_index_float64(self, insert, coerced_val, coerced_dtype): "insert_value", [pd.Timestamp("2012-01-01"), pd.Timestamp("2012-01-01", tz="Asia/Tokyo"), 1], ) - def test_insert_index_datetimes(self, request, fill_val, exp_dtype, insert_value): + def test_insert_index_datetimes(self, fill_val, exp_dtype, insert_value): obj = pd.DatetimeIndex( ["2011-01-01", "2011-01-02", "2011-01-03", "2011-01-04"], tz=fill_val.tz diff --git a/pandas/tests/indexing/test_iat.py b/pandas/tests/indexing/test_iat.py index f1fe464ca0854..44bd51ee1b7d1 100644 --- a/pandas/tests/indexing/test_iat.py +++ b/pandas/tests/indexing/test_iat.py @@ -29,3 +29,20 @@ def test_iat_getitem_series_with_period_index(): expected = ser[index[0]] result = ser.iat[0] assert expected == result + + +def test_iat_setitem_item_cache_cleared(indexer_ial): + # GH#45684 + data = {"x": np.arange(8, dtype=np.int64), "y": np.int64(0)} + df = DataFrame(data).copy() + ser = df["y"] + + # previously this iat setting would split the block and fail to clear + # the item_cache. + indexer_ial(df)[7, 0] = 9999 + + indexer_ial(df)[7, 1] = 1234 + + assert df.iat[7, 1] == 1234 + assert ser.iloc[-1] == 1234 + assert df.iloc[-1, -1] == 1234 diff --git a/pandas/tests/indexing/test_indexing.py b/pandas/tests/indexing/test_indexing.py index 130bf84047eb2..dcb06f1cf778d 100644 --- a/pandas/tests/indexing/test_indexing.py +++ b/pandas/tests/indexing/test_indexing.py @@ -24,6 +24,7 @@ ) import pandas._testing as tm from pandas.core.api import Float64Index +from pandas.core.indexing import IndexingError from pandas.tests.indexing.common import _mklbl from pandas.tests.indexing.test_floats import gen_obj @@ -989,3 +990,31 @@ def test_extension_array_cross_section_converts(): result = df.iloc[0] tm.assert_series_equal(result, expected) + + +@pytest.mark.parametrize( + "ser, keys", + [(Series([10]), (0, 0)), (Series([1, 2, 3], index=list("abc")), (0, 1))], +) +def test_ser_tup_indexer_exceeds_dimensions(ser, keys, indexer_li): + # GH#13831 + exp_err, exp_msg = IndexingError, "Too many indexers" + with pytest.raises(exp_err, match=exp_msg): + indexer_li(ser)[keys] + + if indexer_li == tm.iloc: + # For iloc.__setitem__ we let numpy handle the error reporting. + exp_err, exp_msg = IndexError, "too many indices for array" + + with pytest.raises(exp_err, match=exp_msg): + indexer_li(ser)[keys] = 0 + + +def test_ser_list_indexer_exceeds_dimensions(indexer_li): + # GH#13831 + # Make sure an exception is raised when a tuple exceeds the dimension of the series, + # but not list when a list is used. + ser = Series([10]) + res = indexer_li(ser)[[0, 0]] + exp = Series([10, 10], index=Index([0, 0])) + tm.assert_series_equal(res, exp) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 0d7048156d5a5..c26b1cb4d7a42 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -2494,6 +2494,31 @@ def test_loc_setitem_boolean_and_column(self, float_frame): tm.assert_frame_equal(float_frame, expected) + def test_loc_setitem_ndframe_values_alignment(self): + # GH#45501 + df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) + df.loc[[False, False, True], ["a"]] = DataFrame( + {"a": [10, 20, 30]}, index=[2, 1, 0] + ) + + expected = DataFrame({"a": [1, 2, 10], "b": [4, 5, 6]}) + tm.assert_frame_equal(df, expected) + + # same thing with Series RHS + df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) + df.loc[[False, False, True], ["a"]] = Series([10, 11, 12], index=[2, 1, 0]) + tm.assert_frame_equal(df, expected) + + # same thing but setting "a" instead of ["a"] + df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) + df.loc[[False, False, True], "a"] = Series([10, 11, 12], index=[2, 1, 0]) + tm.assert_frame_equal(df, expected) + + df = DataFrame({"a": [1, 2, 3], "b": [4, 5, 6]}) + ser = df["a"] + ser.loc[[False, False, True]] = Series([10, 11, 12], index=[2, 1, 0]) + tm.assert_frame_equal(df, expected) + class TestLocListlike: @pytest.mark.parametrize("box", [lambda x: x, np.asarray, list]) @@ -2735,6 +2760,18 @@ def test_loc_with_period_index_indexer(): tm.assert_frame_equal(df, df.loc[list(idx)]) +def test_loc_setitem_multiindex_timestamp(): + # GH#13831 + vals = np.random.randn(8, 6) + idx = date_range("1/1/2000", periods=8) + cols = ["A", "B", "C", "D", "E", "F"] + exp = DataFrame(vals, index=idx, columns=cols) + exp.loc[exp.index[1], ("A", "B")] = np.nan + vals[1][0:2] = np.nan + res = DataFrame(vals, index=idx, columns=cols) + tm.assert_frame_equal(res, exp) + + def test_loc_getitem_multiindex_tuple_level(): # GH#27591 lev1 = ["a", "b", "c"] @@ -2990,11 +3027,11 @@ def test_loc_series_getitem_too_many_dimensions(self, indexer): index=MultiIndex.from_tuples([("A", "0"), ("A", "1"), ("B", "0")]), data=[21, 22, 23], ) - msg = "Too many indices" - with pytest.raises(ValueError, match=msg): + msg = "Too many indexers" + with pytest.raises(IndexingError, match=msg): ser.loc[indexer, :] - with pytest.raises(ValueError, match=msg): + with pytest.raises(IndexingError, match=msg): ser.loc[indexer, :] = 1 def test_loc_setitem(self, string_series): diff --git a/pandas/tests/internals/test_internals.py b/pandas/tests/internals/test_internals.py index 83df57f922c9c..f286dc4a09cb2 100644 --- a/pandas/tests/internals/test_internals.py +++ b/pandas/tests/internals/test_internals.py @@ -244,7 +244,7 @@ def create_mgr(descr, item_shape=None): class TestBlock: - def setup_method(self, method): + def setup_method(self): self.fblock = create_block("float", [0, 2, 4]) self.cblock = create_block("complex", [7]) self.oblock = create_block("object", [1, 3]) @@ -285,27 +285,36 @@ def test_copy(self): def test_delete(self): newb = self.fblock.copy() - newb.delete(0) - assert isinstance(newb.mgr_locs, BlockPlacement) + locs = newb.mgr_locs + nb = newb.delete(0) + assert newb.mgr_locs is locs + + assert nb is not newb + tm.assert_numpy_array_equal( - newb.mgr_locs.as_array, np.array([2, 4], dtype=np.intp) + nb.mgr_locs.as_array, np.array([2, 4], dtype=np.intp) ) - assert (newb.values[0] == 1).all() + assert not (newb.values[0] == 1).all() + assert (nb.values[0] == 1).all() newb = self.fblock.copy() - newb.delete(1) - assert isinstance(newb.mgr_locs, BlockPlacement) + locs = newb.mgr_locs + nb = newb.delete(1) + assert newb.mgr_locs is locs + tm.assert_numpy_array_equal( - newb.mgr_locs.as_array, np.array([0, 4], dtype=np.intp) + nb.mgr_locs.as_array, np.array([0, 4], dtype=np.intp) ) - assert (newb.values[1] == 2).all() + assert not (newb.values[1] == 2).all() + assert (nb.values[1] == 2).all() newb = self.fblock.copy() - newb.delete(2) + locs = newb.mgr_locs + nb = newb.delete(2) tm.assert_numpy_array_equal( - newb.mgr_locs.as_array, np.array([0, 2], dtype=np.intp) + nb.mgr_locs.as_array, np.array([0, 2], dtype=np.intp) ) - assert (newb.values[1] == 1).all() + assert (nb.values[1] == 1).all() newb = self.fblock.copy() @@ -319,15 +328,15 @@ def test_delete_datetimelike(self): blk = df._mgr.blocks[0] assert isinstance(blk.values, TimedeltaArray) - blk.delete(1) - assert isinstance(blk.values, TimedeltaArray) + nb = blk.delete(1) + assert isinstance(nb.values, TimedeltaArray) df = DataFrame(arr.view("M8[ns]")) blk = df._mgr.blocks[0] assert isinstance(blk.values, DatetimeArray) - blk.delete([1, 3]) - assert isinstance(blk.values, DatetimeArray) + nb = blk.delete([1, 3]) + assert isinstance(nb.values, DatetimeArray) def test_split(self): # GH#37799 diff --git a/pandas/tests/io/conftest.py b/pandas/tests/io/conftest.py index 86842f6a608d6..7c9fd54059f4a 100644 --- a/pandas/tests/io/conftest.py +++ b/pandas/tests/io/conftest.py @@ -114,7 +114,7 @@ def s3_base(worker_id): proc.terminate() -@pytest.fixture() +@pytest.fixture def s3_resource(s3_base, tips_file, jsonl_file, feather_file): """ Sets up S3 bucket with contents diff --git a/pandas/tests/io/excel/conftest.py b/pandas/tests/io/excel/conftest.py index 0455e0d61ad97..4ce06c01892d9 100644 --- a/pandas/tests/io/excel/conftest.py +++ b/pandas/tests/io/excel/conftest.py @@ -1,5 +1,6 @@ import pytest +from pandas.compat import is_platform_windows import pandas.util._test_decorators as td import pandas._testing as tm @@ -43,7 +44,8 @@ def read_ext(request): return request.param -@pytest.fixture(autouse=True) +# Checking for file leaks can hang on Windows CI +@pytest.fixture(autouse=not is_platform_windows()) def check_for_file_leaks(): """ Fixture to run around every test to ensure that we are not leaking files. diff --git a/pandas/tests/io/excel/test_odswriter.py b/pandas/tests/io/excel/test_odswriter.py index 0e6d1dac55506..e9dad0c7fedc9 100644 --- a/pandas/tests/io/excel/test_odswriter.py +++ b/pandas/tests/io/excel/test_odswriter.py @@ -56,3 +56,13 @@ def test_engine_kwargs(ext, engine_kwargs): else: with ExcelWriter(f, engine="odf", engine_kwargs=engine_kwargs) as _: pass + + +def test_book_and_sheets_consistent(ext): + # GH#45687 - Ensure sheets is updated if user modifies book + with tm.ensure_clean(ext) as f: + with ExcelWriter(f) as writer: + assert writer.sheets == {} + table = odf.table.Table(name="test_name") + writer.book.spreadsheet.addElement(table) + assert writer.sheets == {"test_name": table} diff --git a/pandas/tests/io/excel/test_openpyxl.py b/pandas/tests/io/excel/test_openpyxl.py index 9f6e1ed9c08d9..0387591a248c1 100644 --- a/pandas/tests/io/excel/test_openpyxl.py +++ b/pandas/tests/io/excel/test_openpyxl.py @@ -307,7 +307,7 @@ def test_read_workbook(datapath, ext, read_only): # When read_only is None, use read_excel instead of a workbook @pytest.mark.parametrize("read_only", [True, False, None]) def test_read_with_bad_dimension( - datapath, ext, header, expected_data, filename, read_only, request + datapath, ext, header, expected_data, filename, read_only ): # GH 38956, 39001 - no/incorrect dimension information path = datapath("io", "data", "excel", f"{filename}{ext}") @@ -345,7 +345,7 @@ def test_append_mode_file(ext): # When read_only is None, use read_excel instead of a workbook @pytest.mark.parametrize("read_only", [True, False, None]) -def test_read_with_empty_trailing_rows(datapath, ext, read_only, request): +def test_read_with_empty_trailing_rows(datapath, ext, read_only): # GH 39181 path = datapath("io", "data", "excel", f"empty_trailing_rows{ext}") if read_only is None: @@ -379,3 +379,12 @@ def test_read_empty_with_blank_row(datapath, ext, read_only): result = pd.read_excel(wb, engine="openpyxl") expected = DataFrame() tm.assert_frame_equal(result, expected) + + +def test_book_and_sheets_consistent(ext): + # GH#45687 - Ensure sheets is updated if user modifies book + with tm.ensure_clean(ext) as f: + with ExcelWriter(f, engine="openpyxl") as writer: + assert writer.sheets == {} + sheet = writer.book.create_sheet("test_name", 0) + assert writer.sheets == {"test_name": sheet} diff --git a/pandas/tests/io/excel/test_readers.py b/pandas/tests/io/excel/test_readers.py index 589c98721f139..e9667e5383af8 100644 --- a/pandas/tests/io/excel/test_readers.py +++ b/pandas/tests/io/excel/test_readers.py @@ -150,9 +150,7 @@ def parser(self, *args, **kwargs): expected = expected_defaults[read_ext[1:]] assert result == expected - def test_usecols_int(self, read_ext, df_ref): - df_ref = df_ref.reindex(columns=["A", "B", "C"]) - + def test_usecols_int(self, read_ext): # usecols as int msg = "Passing an integer for `usecols`" with pytest.raises(ValueError, match=msg): @@ -721,7 +719,7 @@ def test_excel_read_buffer(self, read_ext): actual = pd.read_excel(f, sheet_name="Sheet1", index_col=0) tm.assert_frame_equal(expected, actual) - def test_bad_engine_raises(self, read_ext): + def test_bad_engine_raises(self): bad_engine = "foo" with pytest.raises(ValueError, match="Unknown engine: foo"): pd.read_excel("", engine=bad_engine) @@ -743,7 +741,7 @@ def test_missing_file_raises(self, read_ext): with pytest.raises(FileNotFoundError, match=match): pd.read_excel(bad_file) - def test_corrupt_bytes_raises(self, read_ext, engine): + def test_corrupt_bytes_raises(self, engine): bad_stream = b"foo" if engine is None: error = ValueError @@ -765,6 +763,7 @@ def test_corrupt_bytes_raises(self, read_ext, engine): with pytest.raises(error, match=msg): pd.read_excel(bad_stream) + @pytest.mark.network @tm.network def test_read_from_http_url(self, read_ext): url = ( @@ -1287,7 +1286,7 @@ def test_ignore_chartsheets_by_int(self, request, engine, read_ext): ): pd.read_excel("chartsheet" + read_ext, sheet_name=1) - def test_euro_decimal_format(self, request, read_ext): + def test_euro_decimal_format(self, read_ext): # copied from read_csv result = pd.read_excel("test_decimal" + read_ext, decimal=",", skiprows=1) expected = DataFrame( @@ -1311,7 +1310,7 @@ def cd_and_set_engine(self, engine, datapath, monkeypatch): monkeypatch.chdir(datapath("io", "data", "excel")) monkeypatch.setattr(pd, "ExcelFile", func) - def test_engine_used(self, read_ext, engine, monkeypatch): + def test_engine_used(self, read_ext, engine): expected_defaults = { "xlsx": "openpyxl", "xlsm": "openpyxl", @@ -1564,7 +1563,7 @@ def test_corrupt_files_closed(self, engine, read_ext): # GH41778 errors = (BadZipFile,) if engine is None: - pytest.skip() + pytest.skip(f"Invalid test for engine={engine}") elif engine == "xlrd": import xlrd diff --git a/pandas/tests/io/excel/test_writers.py b/pandas/tests/io/excel/test_writers.py index 6f06ef9c09e52..c3715b19af7d5 100644 --- a/pandas/tests/io/excel/test_writers.py +++ b/pandas/tests/io/excel/test_writers.py @@ -350,7 +350,7 @@ def test_excel_sheet_size(self, path): with pytest.raises(ValueError, match=msg): col_df.to_excel(path) - def test_excel_sheet_by_name_raise(self, path, engine): + def test_excel_sheet_by_name_raise(self, path): gt = DataFrame(np.random.randn(10, 2)) gt.to_excel(path) @@ -649,7 +649,7 @@ def test_excel_roundtrip_datetime(self, merge_cells, tsframe, path): tm.assert_frame_equal(tsframe, recons) - def test_excel_date_datetime_format(self, engine, ext, path): + def test_excel_date_datetime_format(self, ext, path): # see gh-4133 # # Excel output format strings @@ -866,7 +866,7 @@ def test_to_excel_output_encoding(self, ext): result = pd.read_excel(filename, sheet_name="TestSheet", index_col=0) tm.assert_frame_equal(result, df) - def test_to_excel_unicode_filename(self, ext, path): + def test_to_excel_unicode_filename(self, ext): with tm.ensure_clean("\u0192u." + ext) as filename: try: f = open(filename, "wb") @@ -1189,7 +1189,7 @@ def test_path_local_path(self, engine, ext): result = tm.round_trip_localpath(writer, reader, path=f"foo{ext}") tm.assert_frame_equal(result, df) - def test_merged_cell_custom_objects(self, merge_cells, path): + def test_merged_cell_custom_objects(self, path): # see GH-27006 mi = MultiIndex.from_tuples( [ @@ -1271,10 +1271,12 @@ def test_register_writer(self): # some awkward mocking to test out dispatch and such actually works called_save = [] called_write_cells = [] + called_sheets = [] class DummyClass(ExcelWriter): called_save = False called_write_cells = False + called_sheets = False supported_extensions = ["xlsx", "xls"] engine = "dummy" @@ -1284,12 +1286,18 @@ def save(self): def write_cells(self, *args, **kwargs): called_write_cells.append(True) + @property + def sheets(self): + called_sheets.append(True) + def check_called(func): func() assert len(called_save) >= 1 assert len(called_write_cells) >= 1 + assert len(called_sheets) == 0 del called_save[:] del called_write_cells[:] + del called_sheets[:] with option_context("io.excel.xlsx.writer", "dummy"): path = "something.xlsx" diff --git a/pandas/tests/io/excel/test_xlsxwriter.py b/pandas/tests/io/excel/test_xlsxwriter.py index b5c1b47775089..82d47a13aefbc 100644 --- a/pandas/tests/io/excel/test_xlsxwriter.py +++ b/pandas/tests/io/excel/test_xlsxwriter.py @@ -83,3 +83,12 @@ def test_engine_kwargs(ext, nan_inf_to_errors): with tm.ensure_clean(ext) as f: with ExcelWriter(f, engine="xlsxwriter", engine_kwargs=engine_kwargs) as writer: assert writer.book.nan_inf_to_errors == nan_inf_to_errors + + +def test_book_and_sheets_consistent(ext): + # GH#45687 - Ensure sheets is updated if user modifies book + with tm.ensure_clean(ext) as f: + with ExcelWriter(f, engine="xlsxwriter") as writer: + assert writer.sheets == {} + sheet = writer.book.add_worksheet("test_name") + assert writer.sheets == {"test_name": sheet} diff --git a/pandas/tests/io/excel/test_xlwt.py b/pandas/tests/io/excel/test_xlwt.py index ec333defd85ac..2d5386d6c616d 100644 --- a/pandas/tests/io/excel/test_xlwt.py +++ b/pandas/tests/io/excel/test_xlwt.py @@ -125,3 +125,12 @@ def test_engine_kwargs(ext, style_compression): assert writer.book._Workbook__styles.style_compression == style_compression # xlwt won't allow us to close without writing something DataFrame().to_excel(writer) + + +def test_book_and_sheets_consistent(ext): + # GH#45687 - Ensure sheets is updated if user modifies book + with tm.ensure_clean(ext) as f: + with ExcelWriter(f) as writer: + assert writer.sheets == {} + sheet = writer.book.add_sheet("test_name") + assert writer.sheets == {"test_name": sheet} diff --git a/pandas/tests/io/formats/style/test_html.py b/pandas/tests/io/formats/style/test_html.py index fad289d5e0d2c..2010d06c9d22d 100644 --- a/pandas/tests/io/formats/style/test_html.py +++ b/pandas/tests/io/formats/style/test_html.py @@ -469,7 +469,7 @@ def test_maximums(styler_mi, rows, cols): assert (">2" in result) is not cols # first trimmed horizontal element -def test_replaced_css_class_names(styler_mi): +def test_replaced_css_class_names(): css = { "row_heading": "ROWHEAD", # "col_heading": "COLHEAD", diff --git a/pandas/tests/io/formats/style/test_style.py b/pandas/tests/io/formats/style/test_style.py index 915497e614b3a..157d046590535 100644 --- a/pandas/tests/io/formats/style/test_style.py +++ b/pandas/tests/io/formats/style/test_style.py @@ -441,7 +441,7 @@ def test_apply_map_header_raises(mi_styler): class TestStyler: - def setup_method(self, method): + def setup_method(self): np.random.seed(24) self.s = DataFrame({"A": np.random.permutation(range(6))}) self.df = DataFrame({"A": [0, 1], "B": np.random.randn(2)}) @@ -839,12 +839,16 @@ def test_table_styles_multiple(self): def test_table_styles_dict_multiple_selectors(self): # GH 44011 result = self.df.style.set_table_styles( - [{"selector": "th,td", "props": [("border-left", "2px solid black")]}] + { + "B": [ + {"selector": "th,td", "props": [("border-left", "2px solid black")]} + ] + } )._translate(True, True)["table_styles"] expected = [ - {"selector": "th", "props": [("border-left", "2px solid black")]}, - {"selector": "td", "props": [("border-left", "2px solid black")]}, + {"selector": "th.col1", "props": [("border-left", "2px solid black")]}, + {"selector": "td.col1", "props": [("border-left", "2px solid black")]}, ] assert result == expected diff --git a/pandas/tests/io/formats/test_format.py b/pandas/tests/io/formats/test_format.py index 99378654c6c11..adcaeba5cfd8d 100644 --- a/pandas/tests/io/formats/test_format.py +++ b/pandas/tests/io/formats/test_format.py @@ -2111,7 +2111,7 @@ def gen_series_formatting(): class TestSeriesFormatting: - def setup_method(self, method): + def setup_method(self): self.ts = tm.makeTimeSeries() def test_repr_unicode(self): diff --git a/pandas/tests/io/formats/test_to_markdown.py b/pandas/tests/io/formats/test_to_markdown.py index 2bd0d11888163..55ec9c83601f9 100644 --- a/pandas/tests/io/formats/test_to_markdown.py +++ b/pandas/tests/io/formats/test_to_markdown.py @@ -59,7 +59,7 @@ def test_series(): ) -def test_no_buf(capsys): +def test_no_buf(): df = pd.DataFrame([1, 2, 3]) result = df.to_markdown() assert ( diff --git a/pandas/tests/io/json/data/teams.csv b/pandas/tests/io/json/data/teams.csv new file mode 100644 index 0000000000000..fe509fb7d7c31 --- /dev/null +++ b/pandas/tests/io/json/data/teams.csv @@ -0,0 +1,2716 @@ +yearID,lgID,teamID,franchID,divID,Rank,G,Ghome,W,L,DivWin,WCWin,LgWin,WSWin,R,AB,H,2B,3B,HR,BB,SO,SB,CS,HBP,SF,RA,ER,ERA,CG,SHO,SV,IPouts,HA,HRA,BBA,SOA,E,DP,FP,name,park,attendance,BPF,PPF,teamIDBR,teamIDlahman45,teamIDretro +1871,NA,BS1,BNA,,3,31,,20,10,,,N,,401,1372,426,70,37,3,60,19,73,,,,303,109,3.5500000000,22,1,3,828,367,2,42,23,225,,0.83,Boston Red Stockings,South End Grounds I,,103,98,BOS,BS1,BS1 +1871,NA,CH1,CNA,,2,28,,19,9,,,N,,302,1196,323,52,21,10,60,22,69,,,,241,77,2.7600000000,25,0,1,753,308,6,28,22,218,,0.82,Chicago White Stockings,Union Base-Ball Grounds,,104,102,CHI,CH1,CH1 +1871,NA,CL1,CFC,,8,29,,10,19,,,N,,249,1186,328,35,40,7,26,25,18,,,,341,116,4.1100000000,23,0,0,762,346,13,53,34,223,,0.81,Cleveland Forest Citys,National Association Grounds,,96,100,CLE,CL1,CL1 +1871,NA,FW1,KEK,,7,19,,7,12,,,N,,137,746,178,19,8,2,33,9,16,,,,243,97,5.1700000000,19,1,0,507,261,5,21,17,163,,0.80,Fort Wayne Kekiongas,Hamilton Field,,101,107,KEK,FW1,FW1 +1871,NA,NY2,NNA,,5,33,,16,17,,,N,,302,1404,403,43,21,1,33,15,46,,,,313,121,3.7200000000,32,1,0,879,373,7,42,22,227,,0.83,New York Mutuals,Union Grounds (Brooklyn),,90,88,NYU,NY2,NY2 +1871,NA,PH1,PNA,,1,28,,21,7,,,Y,,376,1281,410,66,27,9,46,23,56,,,,266,137,4.9500000000,27,0,0,747,329,3,53,16,194,,0.84,Philadelphia Athletics,Jefferson Street Grounds,,102,98,ATH,PH1,PH1 +1871,NA,RC1,ROK,,9,25,,4,21,,,N,,231,1036,274,44,25,3,38,30,53,,,,287,108,4.3000000000,23,1,0,678,315,3,34,16,220,,0.82,Rockford Forest Citys,Agricultural Society Fair Grounds,,97,99,ROK,RC1,RC1 +1871,NA,TRO,TRO,,6,29,,13,15,,,N,,351,1248,384,51,34,6,49,19,62,,,,362,153,5.5100000000,28,0,0,750,431,4,75,12,198,,0.84,Troy Haymakers,Haymakers' Grounds,,101,100,TRO,TRO,TRO +1871,NA,WS3,OLY,,4,32,,15,15,,,N,,310,1353,375,54,26,6,48,13,48,,,,303,137,4.3700000000,32,0,0,846,371,4,45,13,217,,0.85,Washington Olympics,Olympics Grounds,,94,98,OLY,WS3,WS3 +1872,NA,BL1,BLC,,2,58,,35,19,,,N,,617,2576,747,94,35,14,27,28,35,15,,,434,173,3.0200000000,48,1,1,1545,566,3,63,0,432,,0.82,Baltimore Canaries,Newington Park,,106,102,BAL,BL1,BL1 +1872,NA,BR1,ECK,,9,29,,3,26,,,N,,152,1075,235,26,6,0,14,29,8,4,,,413,165,5.7300000000,28,0,0,777,503,6,24,0,278,,0.79,Brooklyn Eckfords,Union Grounds,,87,96,ECK,BR1,BR1 +1872,NA,BR2,BRA,,6,37,,9,28,,,N,,237,1466,370,46,10,0,19,24,17,14,,,473,189,5.0600000000,37,0,0,1008,561,6,19,0,358,,0.81,Brooklyn Atlantics,Capitoline Grounds,,115,122,BRA,BR2,BR2 +1872,NA,BS1,BNA,,1,48,,39,8,,,Y,,521,2137,677,114,31,7,28,26,47,14,,,236,95,1.9900000000,41,3,1,1290,438,0,27,0,263,,0.87,Boston Red Stockings,South End Grounds I,,105,100,BOS,BS1,BS1 +1872,NA,CL1,CFC,,7,22,,6,16,,,N,,174,935,272,37,6,0,17,13,12,3,,,254,101,4.5700000000,15,0,0,597,289,6,24,0,168,,0.82,Cleveland Forest Citys,National Association Grounds,,96,100,CLE,CL1,CL1 +1872,NA,MID,MAN,,8,24,,5,19,,,N,,220,1014,305,31,8,1,5,12,5,3,,,348,140,5.9700000000,22,0,0,633,368,5,13,0,224,,0.80,Middletown Mansfields,Mansfield Club Grounds,,98,103,MAN,MID,MID +1872,NA,NY2,NNA,,3,56,,34,20,,,N,,523,2423,668,86,13,4,55,52,56,21,,,362,145,2.5500000000,54,3,0,1536,618,2,32,0,326,,0.86,New York Mutuals,Union Grounds (Brooklyn),,93,92,NYU,NY2,NY2 +1872,NA,PH1,PNA,,4,47,,30,14,,,N,,539,2140,678,77,23,4,69,47,58,32,,,349,140,3.0100000000,47,1,0,1257,513,3,26,0,298,,0.85,Philadelphia Athletics,Jefferson Street Grounds,,102,100,ATH,PH1,PH1 +1872,NA,TRO,TRO,,5,25,,15,10,,,N,,273,1124,329,56,11,5,7,14,9,7,,,191,77,3.0800000000,17,2,0,675,282,2,10,0,144,,0.86,Troy Haymakers,Haymakers' Grounds,,101,100,TRO,TRO,TRO +1872,NA,WS3,OLY,,10,9,,2,7,,,N,,54,363,93,12,3,0,4,4,0,3,,,140,56,6.3800000000,9,0,0,237,147,0,5,0,96,,0.78,Washington Olympics,Olympics Grounds,,94,98,OLY,WS3,WS3 +1872,NA,WS4,NAT,,11,11,,0,11,,,N,,80,460,105,3,2,0,1,3,0,0,,,190,76,6.9100000000,11,0,0,297,194,2,3,0,100,,0.76,Washington Nationals,Nationals Grounds,,129,141,NAT,WS4,WS4 +1873,NA,BL1,BLC,,3,57,,34,22,,,N,,644,2563,810,119,39,12,40,25,21,10,,,451,170,3.0100000000,55,1,0,1524,680,4,42,34,366,,0.85,Baltimore Canaries,Newington Park,,101,102,BAL,BL1,BL1 +1873,NA,BL4,MAR,,9,6,,0,6,,,N,,26,211,33,5,0,0,0,0,0,0,,,152,48,8.0000000000,6,0,0,162,144,4,0,0,70,,0.76,Baltimore Marylands,Newington Park,,77,99,MAR,BL4,BL4 +1873,NA,BR2,BRA,,6,55,,17,37,,,N,,366,2210,588,60,27,6,53,43,18,9,,,549,221,3.9800000000,52,1,0,1500,737,8,42,15,505,,0.82,Brooklyn Atlantics,Union Grounds,,90,94,BRA,BR2,BR2 +1873,NA,BS1,BNA,,1,60,,43,16,,,Y,,739,2755,930,137,46,13,62,24,39,27,,,460,154,2.5900000000,48,1,3,1608,708,5,35,31,434,,0.83,Boston Red Stockings,South End Grounds I,,106,100,BOS,BS1,BS1 +1873,NA,ELI,RES,,8,23,,2,21,,,N,,98,868,204,21,8,0,8,22,2,1,,,299,74,3.2200000000,22,0,0,621,342,7,9,8,247,,0.78,Elizabeth Resolutes,Waverly Fairgrounds,,92,103,RES,ELI,ELI +1873,NA,NY2,NNA,,4,53,,29,24,,,N,,424,2214,622,67,41,5,42,22,15,5,,,385,139,2.6200000000,48,2,0,1431,539,5,69,76,419,,0.82,New York Mutuals,Union Grounds (Brooklyn),,98,96,NYU,NY2,NY2 +1873,NA,PH1,PNA,,5,52,,28,23,,,N,,474,2266,683,76,22,4,35,32,29,24,,,403,160,3.0300000000,44,3,1,1425,553,4,58,41,383,,0.84,Philadelphia Athletics,Jefferson Street Grounds,,108,105,ATH,PH1,PH1 +1873,NA,PH2,PWS,,2,53,,36,17,,,N,,526,2325,645,83,20,8,62,39,44,14,,,396,148,2.7700000000,50,0,0,1443,627,3,44,28,361,,0.84,Philadelphia Whites,Jefferson Street Grounds,,103,101,PHI,PH2,PH2 +1873,NA,WS5,WBL,,7,39,,8,31,,,N,,283,1563,408,45,25,3,19,33,5,5,,,485,181,4.7100000000,39,0,0,1038,593,11,22,7,240,,0.84,Washington Blue Legs,Olympics Grounds,,96,102,WAS,WS5,WS5 +1874,NA,BL1,BLC,,8,47,,9,38,,,N,,227,1781,435,53,8,1,24,0,,,,,505,201,4.3100000000,43,0,0,1260,643,4,37,0,355,,0.81,Baltimore Canaries,Newington Park,,102,104,BAL,BL1,BL1 +1874,NA,BR2,BRA,,6,56,,22,33,,,N,,301,2165,497,50,11,1,32,0,,,,,449,180,3.2000000000,56,1,0,1518,621,16,13,0,500,,0.82,Brooklyn Atlantics,Union Grounds,,89,94,BRA,BR2,BR2 +1874,NA,BS1,BNA,,1,71,,52,18,,,Y,,735,3122,981,130,57,18,32,0,,,,,415,166,2.3600000000,65,4,3,1899,777,1,27,0,457,,0.85,Boston Red Stockings,South End Grounds I,,105,98,BOS,BS1,BS1 +1874,NA,CH2,CNA,,5,59,,28,31,,,N,,418,2457,690,89,3,3,34,0,,,,,480,192,3.2400000000,58,3,0,1599,696,7,48,0,446,,0.83,Chicago White Stockings,23rd Street Grounds,,101,102,CHI,CH2,CH2 +1874,NA,HR1,HNA,,7,53,,16,37,,,N,,371,2140,587,92,19,2,26,0,,,,,471,189,3.5400000000,45,0,1,1443,660,2,23,0,501,,0.80,Hartford Dark Blues,Hartford Ball Club Grounds,,106,106,HAR,HR1,HR1 +1874,NA,NY2,NNA,,2,65,,42,23,,,N,,500,2719,709,100,31,8,38,0,,,,,377,150,2.3000000000,62,4,0,1758,658,3,40,0,438,,0.84,New York Mutuals,Union Grounds (Brooklyn),,103,102,NYU,NY2,NY2 +1874,NA,PH1,PNA,,3,55,,33,22,,,N,,441,2260,646,87,17,6,24,0,,,,,344,138,2.5500000000,55,0,0,1461,514,5,29,0,396,,0.83,Philadelphia Athletics,Jefferson Street Grounds,,108,105,ATH,PH1,PH1 +1874,NA,PH2,PWS,,4,58,,29,29,,,N,,476,2432,690,74,51,3,28,0,,,,,428,172,2.9500000000,56,3,0,1572,666,4,21,0,518,,0.80,Philadelphia Whites,Jefferson Street Grounds,,103,101,PHI,PH2,PH2 +1875,NA,BR2,BRA,,11,44,,2,42,,,N,,132,1547,304,32,9,2,10,0,,,,,438,174,3.9500000000,31,0,0,1188,531,9,22,0,426,,0.80,Brooklyn Atlantics,Union Grounds,,88,94,BRA,BR2,BR2 +1875,NA,BS1,BNA,,1,82,,71,8,,,Y,,831,3516,1124,157,54,14,31,0,,,,,343,138,1.7000000000,60,10,17,2196,751,2,29,0,464,,0.86,Boston Red Stockings,South End Grounds I,,103,96,BOS,BS1,BS1 +1875,NA,CH2,CNA,,6,69,,30,37,,,N,,379,2658,697,85,13,0,24,0,,,,,416,167,2.4000000000,65,7,0,1875,652,0,28,0,385,,0.86,Chicago White Stockings,23rd Street Grounds,,101,102,CHI,CH2,CH2 +1875,NA,HR1,HNA,,3,86,,54,28,,,N,,557,3342,873,98,34,2,40,0,,,,,343,138,1.6100000000,83,13,0,2313,706,4,16,0,432,,0.88,Hartford Dark Blues,Hartford Ball Club Grounds,,107,105,HAR,HR1,HR1 +1875,NA,KEO,WES,,13,13,,1,12,,,N,,45,449,81,9,6,0,1,0,,,,,88,35,2.8100000000,13,0,0,336,110,0,14,0,68,,0.85,Keokuk Westerns,Perry Park,,105,109,WES,KEO,KEO +1875,NA,NH1,NHV,,8,47,,7,40,,,N,,170,1708,374,42,12,2,13,0,,,,,397,158,3.3400000000,40,0,0,1278,500,5,22,0,437,,0.81,New Haven Elm Citys,Hamilton Park,,87,93,NHV,NH1,NH1 +1875,NA,NY2,NNA,,6,71,,30,38,,,N,,328,2683,626,84,24,7,21,0,,,,,425,170,2.4000000000,70,2,0,1911,716,3,24,0,526,,0.83,New York Mutuals,Union Grounds (Brooklyn),,99,100,NYU,NY2,NY2 +1875,NA,PH1,PNA,,2,77,,53,20,,,N,,699,3245,940,126,61,10,40,0,,,,,402,161,2.1100000000,75,6,0,2061,775,4,40,0,418,,0.87,Philadelphia Athletics,Jefferson Street Grounds,,107,106,ATH,PH1,PH1 +1875,NA,PH2,PWS,,5,70,,37,31,,,N,,470,2717,681,65,28,5,22,0,,,,,376,150,2.1500000000,64,5,0,1881,650,6,30,0,475,,0.84,Philadelphia Whites,Jefferson Street Grounds,,104,102,PHI,PH2,PH2 +1875,NA,PH3,CEN,,11,14,,2,12,,,N,,70,529,126,19,3,0,8,0,,,,,138,55,3.9300000000,14,0,0,378,170,0,3,0,164,,0.76,Philadelphia Centennials,Centennial Grounds,,92,98,CEN,PH3,PH3 +1875,NA,SL1,SLR,,10,19,,4,15,,,N,,60,688,138,20,1,0,14,0,,,,,161,64,3.3700000000,16,2,0,513,207,0,3,0,150,,0.83,St. Louis Red Stockings,Red Stocking Baseball Park,,90,98,SLR,SL1,SL1 +1875,NA,SL2,SNA,,4,70,,39,29,,,N,,386,2679,641,84,27,0,33,0,,,,,369,148,2.1100000000,67,5,1,1890,634,3,20,0,424,,0.86,St. Louis Brown Stockings,Grand Avenue Park,,89,86,STL,SL2,SL2 +1875,NA,WS6,WNT,,9,28,,5,23,,,N,,107,997,194,12,11,0,5,0,,,,,338,135,4.8600000000,23,0,0,750,397,6,11,0,263,,0.79,Washington Nationals,Olympics Grounds,,96,106,WAS,WS6,WS6 +1876,NL,BSN,ATL,,4,70,,39,31,,,N,,471,2722,723,96,24,9,58,98,,,,,450,176,2.5100000000,49,3,7,1896,732,7,104,77,422,42,0.86,Boston Red Caps,South End Grounds I,,102,98,BSN,BSN,BSN +1876,NL,CHN,CHC,,1,66,,52,14,,,Y,,624,2748,926,131,32,8,70,45,,,,,257,116,1.7600000000,59,9,4,1776,608,6,29,51,282,33,0.89,Chicago White Stockings,23rd Street Grounds,,112,106,CHC,CHN,CHN +1876,NL,CN1,CNR,,8,65,,9,56,,,N,,238,2372,555,51,12,4,41,136,,,,,579,238,3.6200000000,57,0,0,1773,850,9,34,60,469,45,0.84,Cincinnati Reds,Avenue Grounds,,86,95,CIN,CN1,CN1 +1876,NL,HAR,HAR,,2,69,,47,21,,,N,,429,2664,711,96,22,2,39,78,,,,,261,116,1.6700000000,69,11,0,1872,570,2,27,114,337,27,0.88,Hartford Dark Blues,Hartford Ball Club Grounds,,110,106,HAR,HAR,HAR +1876,NL,LS1,LGR,,5,69,,30,36,,,N,,280,2570,641,68,14,6,24,98,,,,,344,121,1.6900000000,67,5,0,1929,605,3,38,125,396,44,0.87,Louisville Grays,Louisville Baseball Park,,117,117,LOU,LS1,LS1 +1876,NL,NY3,NYU,,6,57,,21,35,,,N,,260,2180,494,39,15,2,18,35,,,,,412,173,2.9400000000,56,2,0,1590,718,8,24,37,475,18,0.82,New York Mutuals,Union Grounds (Brooklyn),,96,100,NYU,NY3,NY3 +1876,NL,PHN,ATH,,7,60,,14,45,,,N,,378,2387,646,79,35,7,27,36,,,,,534,197,3.2200000000,53,1,2,1650,783,2,41,22,456,32,0.83,Philadelphia Athletics,Jefferson Street Grounds,,104,104,ATH,PHN,PHN +1876,NL,SL3,SBS,,3,64,,45,19,,,N,,386,2478,642,73,27,2,59,63,,,,,229,78,1.2200000000,63,16,0,1731,472,3,39,103,268,33,0.90,St. Louis Brown Stockings,Sportsman's Park I,,93,92,STL,SL3,SL3 +1877,NL,BSN,ATL,,1,61,,42,18,,,Y,,419,2368,700,91,37,4,65,121,,,,,263,131,2.1500000000,61,7,0,1644,557,5,38,177,289,36,0.88,Boston Red Caps,South End Grounds I,,104,100,BSN,BSN,BSN +1877,NL,CHN,CHC,,5,60,,26,33,,,N,,366,2273,633,79,30,0,57,111,,,,,375,200,3.3700000000,45,3,3,1602,630,7,58,92,313,43,0.88,Chicago White Stockings,23rd Street Grounds,,112,106,CHC,CHN,CHN +1877,NL,CN1,CNR,,6,58,,15,42,,,N,,291,2135,545,72,34,6,78,110,,,,,485,240,4.1900000000,48,1,1,1545,747,4,61,85,393,33,0.85,Cincinnati Reds,Avenue Grounds,,89,94,CIN,CN1,CN1 +1877,NL,HAR,HAR,,3,60,,31,27,,,N,,341,2358,637,63,31,4,30,97,,,,,311,140,2.3200000000,59,4,0,1632,572,2,56,99,313,32,0.88,Hartford Dark Blues,Union Grounds (Brooklyn),,90,87,HAR,HAR,HAR +1877,NL,LS1,LGR,,2,61,,35,25,,,N,,339,2355,659,75,36,9,58,140,,,,,288,140,2.2500000000,61,4,0,1677,617,4,41,141,267,37,0.90,Louisville Grays,Louisville Baseball Park,,117,117,LOU,LS1,LS1 +1877,NL,SL3,SBS,,4,60,,28,32,,,N,,284,2178,531,51,36,1,57,147,,,,,318,160,2.6600000000,52,1,0,1623,582,2,92,132,281,29,0.89,St. Louis Brown Stockings,Sportsman's Park I,,95,93,STL,SL3,SL3 +1878,NL,BSN,ATL,,1,60,,41,19,,,Y,,298,2220,535,75,25,2,35,154,,,,,241,140,2.3200000000,58,9,0,1632,595,6,38,184,228,48,0.91,Boston Red Caps,South End Grounds I,,108,102,BSN,BSN,BSN +1878,NL,CHN,CHC,,4,61,,30,30,,,N,,371,2333,677,91,20,3,88,157,,,,,331,145,2.3700000000,61,1,0,1653,577,4,35,175,304,37,0.89,Chicago White Stockings,Lake Front Park I,,106,105,CHC,CHN,CHN +1878,NL,CN1,CNR,,2,61,,37,23,,,N,,333,2281,629,67,22,5,58,141,,,,,281,112,1.8400000000,61,6,0,1644,546,2,63,220,254,37,0.90,Cincinnati Reds,Avenue Grounds,,91,92,CIN,CN1,CN1 +1878,NL,IN1,IBL,,5,63,,24,36,,,N,,293,2300,542,76,15,3,64,197,,,,,328,149,2.3200000000,59,2,1,1734,621,3,87,182,290,37,0.89,Indianapolis Blues,South Street Park,,87,89,IND,IN1,IN1 +1878,NL,ML2,MLG,,6,61,,15,45,,,N,,256,2212,552,65,20,2,69,214,,,,,386,158,2.6000000000,54,1,0,1641,589,3,55,147,376,32,0.86,Milwaukee Grays,Eclipse Park II,,106,113,MLG,ML2,ML2 +1878,NL,PRO,PRO,,3,62,,33,27,,,N,,353,2298,604,107,30,8,50,218,,,,,337,147,2.3800000000,59,6,0,1668,609,5,86,173,311,42,0.89,Providence Grays,Messer Street Grounds,,100,96,PRO,PRO,PRO +1879,NL,BFN,BUF,,3,79,,46,32,,,N,,394,2906,733,105,54,2,78,314,,,,,365,185,2.3400000000,78,8,0,2139,698,3,47,198,331,62,0.90,Buffalo Bisons,Riverside Park,,102,105,BUF,BFN,BFN +1879,NL,BSN,ATL,,2,84,,54,30,,,N,,562,3217,883,138,51,20,90,222,,,,,348,183,2.1900000000,80,13,0,2259,757,9,46,230,319,58,0.91,Boston Red Caps,South End Grounds I,,102,100,BSN,BSN,BSN +1879,NL,CHN,CHC,,4,83,,46,33,,,N,,437,3116,808,167,32,3,73,294,,,,,411,203,2.4600000000,82,6,0,2232,762,5,57,211,381,52,0.90,Chicago White Stockings,Lake Front Park I,,106,103,CHC,CHN,CHN +1879,NL,CL2,CBL,,6,82,,27,55,,,N,,322,2987,666,116,29,4,37,214,,,,,461,218,2.6500000000,79,3,0,2223,818,4,116,287,405,42,0.88,Cleveland Blues,Kennard Street Park,,99,100,CLV,CL2,CL2 +1879,NL,CN1,CNR,,5,81,,43,37,,,N,,485,3085,813,127,53,8,66,207,,,,,464,185,2.2900000000,79,4,0,2178,756,11,81,246,426,48,0.87,Cincinnati Reds,Avenue Grounds,,95,94,CIN,CN1,CN1 +1879,NL,PRO,PRO,,1,85,,59,25,,,Y,,612,3392,1003,142,55,12,91,172,,,,,355,188,2.1800000000,73,3,2,2328,765,9,62,329,382,41,0.90,Providence Grays,Messer Street Grounds,,99,95,PRO,PRO,PRO +1879,NL,SR1,SYR,,7,71,,22,48,,,N,,276,2611,592,61,19,5,28,238,,,,,462,230,3.1900000000,64,5,0,1947,775,4,52,132,398,37,0.87,Syracuse Stars,Newell Park,,89,95,SYR,SR1,SR1 +1879,NL,TRN,TRT,,8,77,,19,56,,,N,,321,2841,673,102,24,4,45,182,,,,,543,216,2.8000000000,75,3,0,2085,840,13,47,210,460,44,0.87,Troy Trojans,Putnam Grounds,,93,100,TRO,TRN,TRN +1880,NL,BFN,BUF,,7,85,,24,58,,,N,,331,2962,669,104,37,3,90,327,,,,,502,254,3.0900000000,72,6,1,2217,879,10,78,186,403,55,0.89,Buffalo Bisons,Riverside Park,,102,103,BUF,BFN,BFN +1880,NL,BSN,ATL,,6,86,,40,44,,,N,,416,3080,779,134,41,20,105,221,,,,,456,255,3.0800000000,70,4,0,2232,840,2,86,187,368,54,0.90,Boston Red Caps,South End Grounds I,,97,96,BSN,BSN,BSN +1880,NL,CHN,CHC,,1,86,,67,17,,,Y,,538,3135,876,164,39,4,104,217,,,,,317,166,1.9300000000,80,8,3,2325,622,8,129,367,329,41,0.91,Chicago White Stockings,Lake Front Park I,,106,102,CHC,CHN,CHN +1880,NL,CL2,CBL,,3,85,,47,37,,,N,,387,3002,726,130,52,7,76,237,,,,,337,160,1.9000000000,83,7,1,2277,685,4,98,289,330,52,0.91,Cleveland Blues,Kennard Street Park,,98,99,CLV,CL2,CL2 +1880,NL,CN1,CNR,,8,83,,21,59,,,N,,296,2895,649,91,36,7,75,267,,,,,472,193,2.4400000000,79,3,0,2139,785,10,88,208,427,49,0.87,Cincinnati Reds,Bank Street Grounds,,98,104,CIN,CN1,CN1 +1880,NL,PRO,PRO,,2,87,,52,32,,,N,,419,3196,793,114,34,8,89,186,,,,,299,146,1.6400000000,75,13,2,2397,663,7,51,286,357,53,0.91,Providence Grays,Messer Street Grounds,,97,93,PRO,PRO,PRO +1880,NL,TRN,TRT,,4,83,,41,42,,,N,,392,3007,755,114,37,5,120,260,,,,,438,225,2.7400000000,81,4,0,2214,763,8,113,173,366,58,0.90,Troy Trojans,Haymakers' Grounds,,105,106,TRO,TRN,TRN +1880,NL,WOR,WOR,,5,85,,40,43,,,N,,412,3024,699,129,52,8,81,278,,,,,370,192,2.2700000000,68,7,5,2286,709,13,97,297,355,49,0.90,Worcester Ruby Legs,Worcester Driving Park Grounds,,108,109,WOR,WOR,WOR +1881,NL,BFN,BUF,,3,83,,45,38,,,N,,440,3019,797,157,50,12,108,270,,,,,447,234,2.8400000000,72,5,0,2226,881,9,89,185,408,48,0.89,Buffalo Bisons,Riverside Park,,99,100,BUF,BFN,BFN +1881,NL,BSN,ATL,,6,83,,38,45,,,N,,349,2916,733,121,27,5,110,193,,,,,410,220,2.7100000000,72,6,3,2190,763,9,143,199,293,54,0.91,Boston Red Caps,South End Grounds I,,96,96,BSN,BSN,BSN +1881,NL,CHN,CHC,,1,84,,56,28,,,Y,,550,3114,918,157,36,12,140,224,,,,,379,201,2.4300000000,81,9,0,2232,722,14,122,228,309,54,0.91,Chicago White Stockings,Lake Front Park I,,105,99,CHC,CHN,CHN +1881,NL,CL2,CBL,,7,85,,36,48,,,N,,392,3117,796,120,39,7,132,224,,,,,414,226,2.6800000000,82,2,0,2280,737,9,126,240,348,68,0.90,Cleveland Blues,Kennard Street Park,,95,95,CLV,CL2,CL2 +1881,NL,DTN,DTN,,4,84,,41,43,,,N,,439,2995,780,131,53,17,136,250,,,,,429,219,2.6500000000,83,10,0,2232,785,8,137,265,338,80,0.90,Detroit Wolverines,Recreation Park,,104,105,DTN,DTN,DTN +1881,NL,PRO,PRO,,2,85,,47,37,,,N,,447,3077,780,144,37,11,146,214,,,,,426,202,2.4000000000,76,7,0,2271,756,5,138,264,389,66,0.89,Providence Grays,Messer Street Grounds,,98,96,PRO,PRO,PRO +1881,NL,TRN,TRT,,5,85,,39,45,,,N,,399,3046,754,124,31,5,140,240,,,,,429,254,2.9700000000,85,8,0,2310,813,11,159,207,311,70,0.91,Troy Trojans,Haymakers' Grounds,,105,106,TRO,TRN,TRN +1881,NL,WOR,WOR,,8,83,,32,50,,,N,,410,3093,781,114,31,7,121,169,,,,,492,290,3.5400000000,80,5,0,2211,882,11,120,196,353,50,0.90,Worcester Ruby Legs,Worcester Driving Park Grounds,,105,108,WOR,WOR,WOR +1882,AA,BL2,BLO,,6,74,,19,54,,,N,,273,2583,535,60,24,4,72,215,,,,,515,278,3.8700000000,64,1,0,1938,760,15,108,113,488,41,0.85,Baltimore Orioles,Newington Park,,90,100,BAL,BL2,BL2 +1882,AA,CN2,CIN,,1,80,,55,25,,,Y,,489,3007,795,95,47,5,102,204,,,,,268,132,1.6500000000,77,11,0,2163,609,7,125,165,322,41,0.90,Cincinnati Red Stockings,Bank Street Grounds,,106,99,CIN,CN2,CN2 +1882,AA,LS2,LOU,,2,80,,42,38,,,N,,443,2806,728,110,28,9,128,193,,,,,352,156,2.0300000000,73,6,0,2079,637,6,112,240,385,37,0.89,Louisville Eclipse,Eclipse Park I,,95,93,LOU,LS2,LS2 +1882,AA,PH4,PHA,,3,75,,41,34,,,N,,406,2707,660,89,21,5,125,164,,,,,389,219,2.9700000000,72,2,0,1989,682,13,99,190,361,36,0.89,Philadelphia Athletics,Oakdale Park,,110,110,PHA,PH4,PH4 +1882,AA,PT1,PIT,,4,79,,39,39,,,N,,428,2904,730,110,59,18,90,183,,,,,418,216,2.7900000000,77,2,0,2088,694,4,82,252,397,40,0.88,Pittsburg Alleghenys,Exposition Park I,,100,99,PIT,PT1,PT1 +1882,AA,SL4,STL,,5,80,,37,43,,,N,,399,2865,663,87,41,11,112,226,,,,,496,223,2.9200000000,75,3,1,2064,729,7,103,225,446,41,0.87,St. Louis Brown Stockings,Sportsman's Park I,,104,104,STL,SL4,SL4 +1882,NL,BFN,BUF,,3,84,,45,39,,,N,,500,3128,858,146,47,18,116,228,,,,,461,266,3.2500000000,79,3,0,2211,778,16,114,287,315,42,0.91,Buffalo Bisons,Riverside Park,,102,101,BUF,BFN,BFN +1882,NL,BSN,ATL,,3,85,,45,39,,,N,,472,3118,823,114,50,15,134,244,,,,,414,233,2.8000000000,81,4,0,2247,738,10,77,352,295,37,0.91,Boston Red Caps,South End Grounds I,,100,98,BSN,BSN,BSN +1882,NL,CHN,CHC,,1,84,,55,29,,,Y,,604,3225,892,209,54,15,142,262,,,,,353,188,2.2200000000,83,7,0,2289,667,13,102,279,376,54,0.89,Chicago White Stockings,Lake Front Park I/Lake Front Park II,,105,99,CHC,CHN,CHN +1882,NL,CL2,CBL,,5,84,,42,40,,,N,,402,3009,716,139,40,20,122,261,,,,,411,229,2.7400000000,81,4,0,2253,743,22,132,232,355,71,0.90,Cleveland Blues,Kennard Street Park,,97,97,CLV,CL2,CL2 +1882,NL,DTN,DTN,,5,86,,42,41,,,N,,407,3144,724,117,44,19,122,308,,,,,488,263,2.9800000000,82,7,0,2379,808,19,129,354,377,44,0.89,Detroit Wolverines,Recreation Park,,100,101,DTN,DTN,DTN +1882,NL,PRO,PRO,,2,84,,52,32,,,N,,463,3104,776,121,53,11,102,255,,,,,356,190,2.2700000000,80,10,1,2256,690,12,87,273,371,67,0.90,Providence Grays,Messer Street Grounds,,100,98,PRO,PRO,PRO +1882,NL,TRN,TRT,,7,85,,35,48,,,N,,430,3057,747,116,59,12,109,298,,,,,522,259,3.0800000000,81,6,0,2271,837,13,168,189,432,70,0.88,Troy Trojans,Troy Ball Club Grounds,,95,98,TRO,TRN,TRN +1882,NL,WOR,WOR,,8,84,,18,66,,,N,,379,2984,689,109,57,16,113,303,,,,,652,308,3.7600000000,75,0,0,2214,964,21,151,195,469,66,0.87,Worcester Ruby Legs,Worcester Driving Park Grounds,,102,107,WOR,WOR,WOR +1883,AA,BL2,BLO,,8,96,,28,68,,,N,,471,3534,870,125,49,5,162,331,,,,,742,383,4.0800000000,86,1,0,2532,943,12,190,290,624,,0.85,Baltimore Orioles,Oriole Park,,103,105,BAL,BL2,BL2 +1883,AA,CL5,CBK,,6,97,,32,65,,,N,,476,3553,854,101,79,15,134,410,,,,,659,370,3.9600000000,90,4,0,2520,980,16,211,222,535,,0.87,Columbus Buckeyes,Recreation Park I,,92,93,COL,CL5,CL5 +1883,AA,CN2,CIN,,3,98,,61,37,,,N,,662,3669,961,122,74,34,139,261,,,,,413,217,2.2600000000,96,8,0,2598,766,17,168,215,360,,0.90,Cincinnati Red Stockings,Bank Street Grounds,,106,99,CIN,CN2,CN2 +1883,AA,LS2,LOU,,5,98,,52,45,,,N,,564,3553,891,114,64,14,140,305,,,,,562,340,3.5100000000,96,7,0,2619,987,7,110,269,471,,0.88,Louisville Eclipse,Eclipse Park I,,93,91,LOU,LS2,LS2 +1883,AA,NY4,NYP,,4,97,,54,42,,,N,,498,3534,883,111,58,6,142,259,,,,,405,282,2.9000000000,97,6,0,2622,749,12,123,480,391,,0.90,New York Metropolitans,Polo Grounds I West Diamond,,109,106,NYP,NY4,NY4 +1883,AA,PH4,PHA,,1,98,,66,32,,,Y,,720,3714,972,149,50,20,194,268,,,,,547,279,2.8800000000,92,1,0,2619,921,22,95,347,584,,0.86,Philadelphia Athletics,Jefferson Street Grounds,,108,105,PHA,PH4,PH4 +1883,AA,PT1,PIT,,7,98,,31,67,,,N,,525,3609,892,120,58,13,162,345,,,,,728,445,4.6200000000,82,1,1,2601,1140,21,151,271,506,,0.88,Pittsburg Alleghenys,Exposition Park I,,94,98,PIT,PT1,PT1 +1883,AA,SL4,STL,,2,98,,65,33,,,N,,549,3495,892,118,46,7,125,240,,,,,409,218,2.2300000000,93,9,1,2637,729,7,150,325,388,,0.90,St. Louis Browns,Sportsman's Park I,,106,106,STL,SL4,SL4 +1883,NL,BFN,BUF,,5,98,,52,45,,,N,,614,3729,1058,184,59,8,147,342,,,,,576,317,3.3200000000,90,5,2,2577,971,12,101,362,445,,0.89,Buffalo Bisons,Riverside Park,,102,101,BUF,BFN,BFN +1883,NL,BSN,ATL,,1,98,,63,35,,,Y,,669,3657,1010,209,86,34,123,423,,,,,456,244,2.5500000000,89,6,3,2580,853,11,90,538,382,,0.90,Boston Beaneaters,South End Grounds I,,102,98,BSN,BSN,BSN +1883,NL,CHN,CHC,,2,98,,59,39,,,N,,679,3658,1000,277,61,13,129,399,,,,,540,266,2.7800000000,91,5,1,2586,942,21,123,299,543,,0.87,Chicago White Stockings,Lake Front Park II,,108,105,CHC,CHN,CHN +1883,NL,CL2,CBL,,4,100,,55,42,,,N,,476,3457,852,184,38,8,139,374,,,,,443,217,2.2200000000,92,5,2,2637,818,7,217,402,389,,0.90,Cleveland Blues,Kennard Street Park,,99,100,CLV,CL2,CL2 +1883,NL,DTN,DTN,,7,101,,40,58,,,N,,524,3726,931,164,48,13,166,378,,,,,650,356,3.5800000000,89,5,2,2682,1026,22,184,324,444,,0.89,Detroit Wolverines,Recreation Park,,95,99,DTN,DTN,DTN +1883,NL,NY1,SFG,,6,98,,46,50,,,N,,530,3524,900,139,69,24,127,297,,,,,577,283,2.9400000000,87,5,0,2598,907,19,170,323,468,,0.88,New York Gothams,Polo Grounds I,,99,99,NYG,NY1,NY1 +1883,NL,PHI,PHI,,8,99,,17,81,,,N,,437,3576,859,181,48,3,141,355,,,,,887,513,5.3400000000,91,3,0,2592,1267,20,125,253,639,,0.85,Philadelphia Quakers,Recreation Park,,91,98,PHI,PHI,PHI +1883,NL,PRO,PRO,,3,98,,58,40,,,N,,636,3685,1001,189,59,21,149,309,,,,,436,229,2.3700000000,88,4,1,2613,827,12,111,376,419,,0.90,Providence Grays,Messer Street Grounds,,103,99,PRO,PRO,PRO +1884,AA,BL2,BLO,,6,108,,63,43,,,N,N,636,3845,896,133,84,32,211,545,,,,,515,288,2.7100000000,105,8,1,2865,869,16,219,635,461,,0.89,Baltimore Orioles,Oriole Park,,104,107,BAL,BL2,BL2 +1884,AA,BR3,LAD,,9,109,,40,64,,,N,N,476,3763,845,112,47,16,179,417,,,,,644,399,3.7900000000,105,6,0,2844,996,20,163,378,508,,0.88,Brooklyn Atlantics,Washington Park I,,100,102,BRO,BR3,BR3 +1884,AA,CL5,CBK,,2,110,,69,39,,,N,N,585,3759,901,107,96,40,196,404,,,,,459,286,2.6800000000,102,8,1,2886,815,22,172,526,433,,0.90,Columbus Buckeyes,Recreation Park I,,92,93,COL,CL5,CL5 +1884,AA,CN2,CIN,,5,112,,68,41,,,N,N,754,4090,1037,109,96,36,154,404,,,,,512,364,3.3300000000,111,11,0,2949,956,27,181,308,412,,0.91,Cincinnati Red Stockings,League Park I in Cincinnati,,104,102,CIN,CN2,CN2 +1884,AA,IN2,IHO,,12,110,,29,78,,,N,N,462,3813,890,129,62,20,125,560,,,,,755,437,4.2000000000,107,2,0,2811,1001,30,199,479,515,,0.88,Indianapolis Hoosiers,Seventh Street Park,,97,100,IND,IN2,IN2 +1884,AA,LS2,LOU,,3,110,,68,40,,,N,N,573,3957,1004,152,69,17,146,408,,,,,425,238,2.1700000000,101,6,0,2967,836,9,97,470,426,,0.91,Louisville Eclipse,Eclipse Park I,,95,95,LOU,LS2,LS2 +1884,AA,NY4,NYP,,1,112,,75,32,,,Y,N,734,4012,1052,155,64,22,203,315,,,,,423,269,2.4600000000,111,9,0,2952,800,15,119,611,441,,0.90,New York Metropolitans,Polo Grounds I West Diamond,,100,96,NYP,NY4,NY4 +1884,AA,PH4,PHA,,7,108,,61,46,,,N,N,700,3959,1057,167,100,26,153,425,,,,,546,360,3.4200000000,105,5,0,2844,920,16,127,530,458,,0.90,Philadelphia Athletics,Jefferson Street Grounds,,107,104,PHA,PH4,PH4 +1884,AA,PT1,PIT,,11,110,,30,78,,,N,N,406,3689,777,105,50,2,143,411,,,,,725,456,4.3500000000,108,4,0,2829,1059,25,216,338,523,,0.88,Pittsburg Alleghenys,Recreation Park,,97,101,PIT,PT1,PT1 +1884,AA,RIC,RIC,,10,46,,12,30,,,N,N,194,1469,325,40,33,7,53,284,,,,,294,186,4.5200000000,45,1,0,1110,402,14,52,167,238,,0.87,Richmond Virginians,Allen Pasture,,99,102,RIC,RIC,RIC +1884,AA,SL4,STL,,4,110,,67,40,,,N,N,658,3952,986,151,60,11,174,339,,,,,539,293,2.6700000000,99,8,0,2961,881,16,172,477,489,,0.90,St. Louis Browns,Sportsman's Park I,,104,101,STL,SL4,SL4 +1884,AA,TL1,TOL,,8,110,,46,58,,,N,N,463,3712,859,153,48,8,157,541,,,,,571,322,3.0600000000,103,9,1,2838,885,12,169,501,469,,0.90,Toledo Blue Stockings,League Park,,103,105,TOL,TL1,TL1 +1884,AA,WS7,WST,,13,63,,12,51,,,N,N,248,2166,434,61,24,6,102,377,,,,,481,242,4.0100000000,62,3,0,1629,643,21,110,235,399,,0.85,Washington Nationals,Athletic Park,,88,93,WAS,WS7,WS7 +1884,NL,BFN,BUF,,3,115,,64,47,,,N,N,700,4197,1099,163,69,39,215,458,,,,,626,328,2.9500000000,108,14,1,3003,1041,46,189,534,463,,0.90,Buffalo Bisons,Olympic Park I,,103,105,BUF,BFN,BFN +1884,NL,BSN,ATL,,2,116,,73,38,,,N,N,684,4189,1063,179,60,36,207,660,,,,,468,285,2.4700000000,109,14,2,3111,932,30,135,742,374,,0.92,Boston Beaneaters,South End Grounds I,,99,97,BSN,BSN,BSN +1884,NL,CHN,CHC,,5,113,,62,50,,,N,N,834,4182,1176,162,50,142,264,469,,,,,647,336,3.0300000000,106,9,0,2991,1028,83,231,472,595,,0.88,Chicago White Stockings,Lake Front Park II,,108,105,CHC,CHN,CHN +1884,NL,CL2,CBL,,7,113,,35,77,,,N,N,458,3934,934,147,49,16,170,576,,,,,716,379,3.4300000000,107,7,0,2982,1046,35,269,482,512,,0.89,Cleveland Blues,Kennard Street Park,,103,106,CLV,CL2,CL2 +1884,NL,DTN,DTN,,8,114,,28,84,,,N,N,445,3970,825,114,47,31,207,699,,,,,736,370,3.3800000000,109,3,0,2952,1097,36,245,488,514,,0.89,Detroit Wolverines,Recreation Park,,94,97,DTN,DTN,DTN +1884,NL,NY1,SFG,,4,116,,62,50,,,N,N,693,4124,1053,149,67,23,249,492,,,,,623,352,3.1200000000,111,4,0,3042,1011,28,326,567,514,,0.89,New York Gothams,Polo Grounds I,,105,102,NYG,NY1,NY1 +1884,NL,PHI,PHI,,6,113,,39,73,,,N,N,549,3998,934,149,39,14,209,512,,,,,824,428,3.9300000000,106,3,1,2943,1090,38,254,411,536,,0.88,Philadelphia Quakers,Recreation Park,,94,99,PHI,PHI,PHI +1884,NL,PRO,PRO,,1,114,,84,28,,,Y,Y,665,4093,987,153,43,21,300,469,,,,,388,185,1.6100000000,107,16,2,3108,825,26,172,639,398,,0.91,Providence Grays,Messer Street Grounds,,99,96,PRO,PRO,PRO +1884,UA,ALT,ALT,,10,25,,6,19,,,N,,90,899,223,30,6,2,22,130,,,,,216,114,4.6800000000,20,0,0,657,292,3,52,93,156,,0.86,Altoona Mountain City,,,101,109,ALT,ALT,ALT +1884,UA,BLU,BLU,,4,106,,58,47,,,N,,662,3883,952,150,26,17,144,652,,,,,627,316,3.0100000000,92,4,0,2838,1002,24,177,628,610,,0.87,Baltimore Monumentals,,,109,109,BLU,BLU,BLU +1884,UA,BSU,BRD,,5,111,,58,51,,,N,,636,3940,928,168,32,19,128,787,,,,,558,286,2.7000000000,100,5,1,2859,885,17,110,753,633,,0.86,Boston Reds,,,99,98,BOS,BSU,BSU +1884,UA,CHU,CPI,,6,93,,41,50,,,N,,438,3212,742,127,26,10,119,505,,,,,482,243,2.7200000000,86,6,0,2409,743,12,137,679,459,,0.88,Chicago/Pittsburgh (Union League),,,98,99,CPI,CHU,CHU +1884,UA,CNU,COR,,3,105,,69,36,,,N,,703,3786,1027,118,63,26,147,482,,,,,466,242,2.3800000000,95,11,1,2742,831,17,90,503,532,,0.88,Cincinnati Outlaw Reds,,,111,107,COR,CNU,CNU +1884,UA,KCU,KCU,,11,82,,16,63,,,N,,311,2802,557,104,15,6,123,529,,,,,618,317,4.0600000000,70,0,0,2106,862,14,127,334,520,,0.86,Kansas City Cowboys,,,87,92,KCC,KCU,KCU +1884,UA,MLU,MLU,,2,12,,8,4,,,N,,53,395,88,25,0,0,20,70,,,,,34,26,2.2500000000,12,3,0,312,49,1,13,139,53,,0.89,Milwaukee Brewers,,,60,60,MIL,MLU,MLU +1884,UA,PHU,PHK,,8,67,,21,46,,,N,,414,2518,618,108,35,7,103,405,,,,,545,305,4.6300000000,64,1,0,1779,726,7,105,310,501,,0.84,Philadelphia Keystones,,,91,94,PHK,PHU,PHU +1884,UA,SLU,SLM,,1,114,,94,19,,,Y,,887,4285,1251,259,41,32,181,542,,,,,429,216,1.9600000000,104,8,6,2979,838,9,110,550,554,,0.88,St. Louis Maroons,,,99,98,SLM,SLU,SLU +1884,UA,SPU,STP,,9,9,,2,6,,,N,,24,272,49,13,1,0,7,47,,,,,57,25,3.1700000000,7,1,0,213,72,1,27,44,47,,0.87,St. Paul White Caps,,,60,60,STP,SPU,SPU +1884,UA,WIL,WIL,,12,18,,2,16,,,N,,35,521,91,8,8,2,22,123,,,,,114,48,3.0400000000,15,0,0,426,165,4,18,113,104,,0.85,Wilmington Quicksteps,,,103,109,WIL,WIL,WIL +1884,UA,WSU,WNA,,7,114,,47,65,,,N,,572,3926,931,120,26,4,118,558,,,,,679,364,3.4400000000,94,5,0,2859,992,16,168,684,550,,0.87,Washington Nationals,,,96,98,WHS,WSU,WSU +1885,AA,BL2,BLO,,8,110,,41,68,,,N,N,541,3820,837,124,59,17,279,529,,,,,683,421,3.9000000000,103,2,4,2913,1059,12,222,395,419,,0.90,Baltimore Orioles,Oriole Park,,99,100,BAL,BL2,BL2 +1885,AA,BR3,LAD,,5,112,,53,59,,,N,N,624,3943,966,121,65,14,238,324,,,,,650,381,3.4600000000,110,3,1,2973,955,27,211,436,436,,0.91,Brooklyn Grays,Washington Park I,,100,102,BRO,BR3,BR3 +1885,AA,CN2,CIN,,2,112,,63,49,,,N,N,642,4050,1046,108,77,26,153,420,,,,,575,362,3.2600000000,102,7,1,2997,998,24,250,330,417,,0.91,Cincinnati Red Stockings,League Park I in Cincinnati,,102,100,CIN,CN2,CN2 +1885,AA,LS2,LOU,,6,112,,53,59,,,N,N,564,3969,986,126,83,19,152,448,,,,,598,298,2.6800000000,109,3,1,3006,927,13,217,462,460,,0.90,Louisville Colonels,Eclipse Park I,,100,100,LOU,LS2,LS2 +1885,AA,NY4,NYP,,7,108,,44,64,,,N,N,526,3731,921,123,57,21,217,428,,,,,688,432,4.1500000000,103,2,0,2811,1015,36,204,408,453,,0.90,New York Metropolitans,Polo Grounds I West Diamond,,84,86,NYP,NY4,NY4 +1885,AA,PH4,PHA,,4,113,,55,57,,,N,N,764,4142,1099,169,76,30,223,410,,,,,691,360,3.2300000000,105,5,0,3009,1038,11,212,506,482,,0.90,Philadelphia Athletics,Jefferson Street Grounds,,106,106,PHA,PH4,PH4 +1885,AA,PT1,PIT,,3,111,,56,55,,,N,N,547,3975,955,123,79,5,189,537,,,,,539,328,2.9200000000,104,8,0,3033,918,14,201,454,422,,0.91,Pittsburg Alleghenys,Recreation Park,,100,99,PIT,PT1,PT1 +1885,AA,SL4,STL,,1,112,,79,33,,,Y,N,677,3972,979,132,57,17,234,282,,,,,461,272,2.4400000000,111,11,0,3006,879,12,168,378,381,,0.92,St. Louis Browns,Sportsman's Park I,,105,101,STL,SL4,SL4 +1885,NL,BFN,BUF,,7,112,,38,74,,,N,N,495,3900,980,149,50,23,179,380,,,,,761,456,4.2900000000,107,4,1,2868,1175,31,234,320,464,,0.90,Buffalo Bisons,Olympic Park I,,103,105,BUF,BFN,BFN +1885,NL,BSN,ATL,,5,113,,46,66,,,N,N,528,3950,915,144,53,22,190,522,,,,,589,330,3.0300000000,111,10,0,2943,1045,26,188,480,445,,0.90,Boston Beaneaters,South End Grounds I,,96,95,BSN,BSN,BSN +1885,NL,CHN,CHC,,1,113,,87,25,,,Y,N,834,4093,1079,184,75,54,340,429,,,,,470,251,2.2300000000,108,14,4,3045,868,37,202,458,497,,0.90,Chicago White Stockings,West Side Park I,,114,107,CHC,CHN,CHN +1885,NL,DTN,DTN,,6,108,,41,67,,,N,N,514,3773,917,149,66,25,216,451,,,,,582,305,2.8800000000,105,6,1,2862,966,18,224,475,445,,0.90,Detroit Wolverines,Recreation Park,,100,101,DTN,DTN,DTN +1885,NL,NY1,SFG,,2,112,,85,27,,,N,N,691,4029,1085,150,82,16,221,312,,,,,370,190,1.7200000000,109,16,1,2982,758,11,265,516,331,,0.92,New York Giants,Polo Grounds I,,101,97,NYG,NY1,NY1 +1885,NL,PHI,PHI,,3,111,,56,54,,,N,N,513,3893,891,156,35,20,220,401,,,,,511,259,2.3900000000,108,10,0,2928,860,18,218,378,447,,0.90,Philadelphia Quakers,Recreation Park,,97,98,PHI,PHI,PHI +1885,NL,PRO,PRO,,4,110,,53,57,,,N,N,442,3727,820,114,30,6,265,430,,,,,531,289,2.7100000000,108,8,0,2880,912,18,235,371,459,,0.90,Providence Grays,Messer Street Grounds,,97,95,PRO,PRO,PRO +1885,NL,SL5,SLM,,8,111,,36,72,,,N,N,390,3758,829,121,21,8,214,412,,,,,593,361,3.3700000000,107,4,0,2895,935,15,278,337,398,,0.91,St. Louis Maroons,Sportsman's Park I,,97,98,SLM,SL5,SL5 +1886,AA,BL2,BLO,,8,139,,48,83,,,N,N,625,4639,945,124,51,8,379,603,269,,,,878,547,4.0800000000,134,5,0,3618,1197,25,403,805,524,,0.90,Baltimore Orioles,Oriole Park,,98,99,BAL,BL2,BL2 +1886,AA,BR3,LAD,,3,141,,76,61,,,N,N,832,5053,1261,196,80,16,433,523,248,,,,832,469,3.4200000000,138,6,0,3702,1202,17,464,540,610,,0.90,Brooklyn Grays,Washington Park I,,100,100,BRO,BR3,BR3 +1886,AA,CN2,CIN,,5,141,,65,73,,,N,N,883,4915,1225,145,95,45,374,633,185,,,,865,579,4.1800000000,129,3,0,3741,1267,25,481,495,580,,0.90,Cincinnati Red Stockings,League Park I in Cincinnati,,103,102,CIN,CN2,CN2 +1886,AA,LS2,LOU,,4,138,,66,70,,,N,N,833,4921,1294,182,88,20,410,558,202,,,,805,412,3.0700000000,131,5,2,3627,1109,16,432,720,593,,0.90,Louisville Colonels,Eclipse Park I,,106,106,LOU,LS2,LS2 +1886,AA,NY4,NYP,,7,137,,53,82,,,N,N,628,4683,1047,108,72,18,330,578,120,,,,766,461,3.5000000000,134,5,0,3558,1148,23,386,559,545,,0.90,New York Metropolitans,St. George Cricket Grounds,,96,100,NYP,NY4,NY4 +1886,AA,PH4,PHA,,6,139,,63,72,,,N,N,772,4856,1142,192,82,21,378,697,284,,,,942,537,3.9700000000,134,4,0,3654,1308,35,388,513,637,,0.89,Philadelphia Athletics,Jefferson Street Grounds,,101,102,PHA,PH4,PH4 +1886,AA,PT1,PIT,,2,140,,80,57,,,N,N,810,4854,1171,186,96,16,478,713,260,,,,647,386,2.8300000000,137,15,1,3678,1130,10,299,515,487,,0.91,Pittsburg Alleghenys,Recreation Park,,98,97,PIT,PT1,PT1 +1886,AA,SL4,STL,,1,139,,93,46,,,Y,Y,944,5009,1365,206,85,20,400,425,336,,,,592,340,2.4900000000,134,14,2,3687,1087,13,329,583,494,,0.91,St. Louis Browns,Sportsman's Park I,,105,100,STL,SL4,SL4 +1886,NL,BSN,ATL,,5,118,,56,61,,,N,N,657,4180,1085,151,59,24,250,537,156,,,,661,370,3.2400000000,116,3,0,3087,1049,33,298,511,465,,0.90,Boston Beaneaters,South End Grounds I,,97,97,BSN,BSN,BSN +1886,NL,CHN,CHC,,1,126,,90,34,,,Y,N,900,4378,1223,198,87,53,460,513,213,,,,555,310,2.5400000000,116,8,3,3291,988,49,262,647,475,,0.91,Chicago White Stockings,West Side Park I,,114,109,CHC,CHN,CHN +1886,NL,DTN,DTN,,2,126,,87,36,,,N,N,829,4501,1260,176,81,53,374,426,194,,,,538,349,2.8500000000,122,8,0,3309,995,20,270,592,373,,0.92,Detroit Wolverines,Recreation Park,,103,100,DTN,DTN,DTN +1886,NL,KCN,KCN,,7,126,,30,91,,,N,N,494,4236,967,177,48,19,269,608,96,,,,872,573,4.8400000000,117,4,0,3198,1345,27,246,442,455,,0.90,Kansas City Cowboys,Association Park,,106,114,KCN,KCN,KCN +1886,NL,NY1,SFG,,3,124,,75,44,,,N,N,692,4298,1156,175,68,21,237,410,155,,,,558,337,2.8600000000,119,3,1,3186,1029,23,280,588,359,,0.92,New York Giants,Polo Grounds I,,103,99,NYG,NY1,NY1 +1886,NL,PHI,PHI,,4,119,,71,43,,,N,N,621,4072,976,145,66,26,282,516,226,,,,498,284,2.4500000000,110,10,2,3135,923,29,264,540,393,,0.92,Philadelphia Quakers,Recreation Park,,100,99,PHI,PHI,PHI +1886,NL,SL5,SLM,,6,126,,43,79,,,N,N,547,4250,1001,183,46,30,235,656,156,,,,712,388,3.2400000000,118,6,0,3231,1050,34,392,501,452,,0.91,St. Louis Maroons,Sportsman's Park I,,94,97,SLM,SL5,SL5 +1886,NL,WS8,WNL,,8,125,,28,92,,,N,N,445,4082,856,135,51,23,265,582,143,,,,791,497,4.3000000000,116,4,0,3123,1147,34,379,500,458,,0.91,Washington Nationals,Swampdoodle Grounds,,94,99,WHS,WS8,WS8 +1887,AA,BL2,BLO,,3,141,,77,58,,,N,N,975,4825,1337,202,100,31,469,334,545,,,,861,525,3.8700000000,132,8,0,3660,1288,16,418,470,549,,0.90,Baltimore Orioles,Oriole Park,,94,95,BAL,BL2,BL2 +1887,AA,BR3,LAD,,6,138,,60,74,,,N,N,904,4913,1281,200,82,25,456,365,409,,,,918,589,4.4700000000,132,3,3,3555,1348,27,454,332,562,,0.90,Brooklyn Grays,Washington Park I,,101,100,BRO,BR3,BR3 +1887,AA,CL3,CLV,,8,133,,39,92,,,N,N,729,4649,1170,178,77,14,375,463,355,,,,1112,630,4.9900000000,127,2,1,3408,1472,34,533,332,576,,0.89,Cleveland Blues,National League Park II,,97,101,CLE,CL3,CL3 +1887,AA,CN2,CIN,,2,136,,81,54,,,N,N,892,4797,1285,179,102,37,382,366,527,,,,745,470,3.5800000000,129,11,1,3546,1202,28,396,330,484,,0.91,Cincinnati Red Stockings,League Park I in Cincinnati,,102,101,CIN,CN2,CN2 +1887,AA,LS2,LOU,,4,139,,76,60,,,N,N,956,4916,1420,194,98,27,436,356,466,,,,854,511,3.8200000000,133,3,1,3615,1274,31,357,544,574,,0.90,Louisville Colonels,Eclipse Park I,,102,102,LOU,LS2,LS2 +1887,AA,NY4,NYP,,7,138,,44,89,,,N,N,754,4820,1197,193,66,21,439,463,305,,,,1093,692,5.2800000000,132,1,0,3540,1545,39,406,316,628,,0.89,New York Metropolitans,St. George Cricket Grounds,,96,100,NYP,NY4,NY4 +1887,AA,PH4,PHA,,5,137,,64,69,,,N,N,893,4954,1370,231,84,29,321,388,476,,,,890,605,4.5900000000,131,5,1,3558,1227,29,433,417,528,,0.90,Philadelphia Athletics,Jefferson Street Grounds,,100,100,PHA,PH4,PH4 +1887,AA,SL4,STL,,1,138,,95,40,,,Y,N,1131,5048,1550,261,78,39,442,340,581,,,,761,502,3.7700000000,132,7,2,3597,1254,19,323,334,481,,0.91,St. Louis Browns,Sportsman's Park I,,111,106,STL,SL4,SL4 +1887,NL,BSN,ATL,,5,127,,61,60,,,N,N,831,4531,1255,185,94,53,340,392,373,,,,792,539,4.4100000000,123,4,1,3300,1226,55,396,254,522,,0.90,Boston Beaneaters,South End Grounds I,,98,97,BSN,BSN,BSN +1887,NL,CHN,CHC,,3,127,,71,50,,,N,N,813,4350,1177,178,98,80,407,400,382,,,,716,433,3.4600000000,117,4,3,3378,1156,55,338,510,472,,0.91,Chicago White Stockings,West Side Park I,,113,110,CHC,CHN,CHN +1887,NL,DTN,DTN,,1,127,,79,45,,,Y,Y,969,4689,1404,213,126,55,352,258,267,,,,714,490,3.9500000000,122,3,1,3348,1172,52,344,337,384,,0.92,Detroit Wolverines,Recreation Park,,104,100,DTN,DTN,DTN +1887,NL,IN3,IND,,8,127,,37,89,,,N,N,628,4368,1080,162,70,33,300,379,334,,,,965,633,5.2400000000,118,4,1,3264,1289,60,431,245,479,,0.91,Indianapolis Hoosiers,Athletic Park I,,96,102,IND,IN3,IN3 +1887,NL,NY1,SFG,,4,129,,68,55,,,N,N,816,4516,1259,167,93,48,361,326,415,,,,723,441,3.5700000000,123,5,1,3339,1096,27,373,415,430,,0.92,New York Giants,Polo Grounds I,,96,93,NYG,NY1,NY1 +1887,NL,PHI,PHI,,2,128,,75,48,,,N,N,901,4630,1269,213,89,47,385,346,355,,,,702,436,3.4700000000,119,7,1,3396,1173,48,305,435,471,,0.91,Philadelphia Quakers,Philadelphia Baseball Grounds,,106,104,PHI,PHI,PHI +1887,NL,PIT,PIT,,6,125,,55,69,,,N,N,621,4414,1141,183,78,20,319,381,221,,,,750,507,4.1200000000,123,3,0,3324,1287,39,246,248,425,,0.92,Pittsburg Alleghenys,Recreation Park,,93,93,PIT,PIT,PIT +1887,NL,WS8,WNL,,7,126,,46,76,,,N,N,601,4314,1039,149,63,47,269,339,334,,,,818,507,4.1900000000,124,4,0,3270,1216,47,299,396,469,,0.91,Washington Nationals,Swampdoodle Grounds,,95,100,WHS,WS8,WS8 +1888,AA,BL2,BLO,,5,137,,57,80,,,N,N,653,4656,1068,162,70,19,298,479,326,,,,779,504,3.7800000000,130,3,0,3600,1162,23,419,525,461,,0.92,Baltimore Orioles,Oriole Park,,98,98,BAL,BL2,BL2 +1888,AA,BR3,LAD,,2,143,,88,52,,,N,N,758,4871,1177,172,70,25,353,439,334,,,,584,333,2.3300000000,138,9,0,3858,1059,15,285,577,502,,0.91,Brooklyn Bridegrooms,Washington Park I,,101,100,BRO,BR3,BR3 +1888,AA,CL3,CLV,,6,135,,50,82,,,N,N,651,4603,1076,128,59,12,315,559,353,,,,839,484,3.7200000000,131,6,1,3513,1235,38,389,500,480,,0.91,Cleveland Blues,National League Park II,,97,101,CLE,CL3,CL3 +1888,AA,CN2,CIN,,4,137,,80,54,,,N,N,745,4801,1161,132,82,32,345,555,469,,,,628,375,2.7300000000,132,10,2,3711,1103,19,310,539,456,,0.92,Cincinnati Red Stockings,League Park I in Cincinnati,,105,104,CIN,CN2,CN2 +1888,AA,KC2,KCC,,8,132,,43,89,,,N,N,579,4588,1000,142,61,19,288,604,257,,,,896,552,4.2900000000,128,4,0,3471,1306,32,401,381,507,,0.91,Kansas City Cowboys,Association Park I,,106,112,KCC,KC2,KC2 +1888,AA,LS2,LOU,,7,139,,48,87,,,N,N,689,4881,1177,183,67,14,322,604,318,,,,870,445,3.2500000000,133,6,0,3693,1264,28,281,599,609,,0.90,Louisville Colonels,Eclipse Park I,,98,100,LOU,LS2,LS2 +1888,AA,PH4,PHA,,3,136,,81,52,,,N,N,827,4828,1209,183,89,31,303,473,434,,,,594,323,2.4100000000,133,13,0,3624,988,14,324,596,475,,0.91,Philadelphia Athletics,Jefferson Street Grounds,,100,98,PHA,PH4,PH4 +1888,AA,SL4,STL,,1,137,,92,43,,,Y,N,789,4755,1189,149,47,36,410,521,468,,,,501,281,2.0900000000,132,12,0,3636,939,19,225,517,430,,0.92,St. Louis Browns,Sportsman's Park I,,111,106,STL,SL4,SL4 +1888,NL,BSN,ATL,,4,137,,70,64,,,N,N,669,4834,1183,167,89,56,282,524,293,,,,619,355,2.6100000000,134,7,0,3675,1104,36,269,484,494,,0.91,Boston Beaneaters,South End Grounds II,,104,102,BSN,BSN,BSN +1888,NL,CHN,CHC,,2,136,,77,58,,,N,N,734,4616,1201,147,95,77,290,563,287,,,,659,390,2.9600000000,123,13,1,3558,1139,63,308,588,417,,0.92,Chicago White Stockings,West Side Park I,,107,106,CHC,CHN,CHN +1888,NL,DTN,DTN,,5,134,,68,63,,,N,N,721,4849,1275,177,72,51,307,396,193,,,,629,365,2.7400000000,130,10,1,3597,1115,44,183,522,463,,0.91,Detroit Wolverines,Recreation Park,,100,97,DTN,DTN,DTN +1888,NL,IN3,IND,,7,136,,50,85,,,N,N,603,4623,1100,180,33,34,236,492,350,,,,731,502,3.8100000000,132,6,0,3561,1260,64,308,388,449,,0.92,Indianapolis Hoosiers,Athletic Park II,,102,104,IND,IN3,IN3 +1888,NL,NY1,SFG,,1,138,,84,47,,,Y,Y,659,4747,1149,130,76,55,270,456,314,,,,479,263,1.9600000000,133,20,1,3624,907,27,307,726,430,,0.92,New York Giants,Polo Grounds I,,99,96,NYG,NY1,NY1 +1888,NL,PHI,PHI,,3,132,,69,61,,,N,N,535,4528,1021,151,46,16,268,485,246,,,,509,309,2.3800000000,125,16,3,3501,1072,26,196,519,424,,0.92,Philadelphia Quakers,Philadelphia Baseball Grounds,,105,104,PHI,PHI,PHI +1888,NL,PIT,PIT,,6,139,,66,68,,,N,N,534,4713,1070,150,49,14,194,583,287,,,,580,357,2.6700000000,135,13,0,3609,1190,23,223,367,416,,0.92,Pittsburg Alleghenys,Recreation Park,,92,93,PIT,PIT,PIT +1888,NL,WS8,WNL,,8,136,,48,86,,,N,N,482,4546,944,98,49,30,246,499,331,,,,731,464,3.5400000000,133,6,0,3537,1157,50,298,406,474,,0.91,Washington Nationals,Swampdoodle Grounds,,94,98,WHS,WS8,WS8 +1889,AA,BL2,BLO,,5,139,,70,65,,,N,N,791,4756,1209,155,68,20,418,536,311,,,,795,472,3.5600000000,128,10,1,3576,1168,27,424,540,536,,0.90,Baltimore Orioles,Oriole Park,,98,99,BAL,BL2,BL2 +1889,AA,BR3,LAD,,1,140,,93,44,,,Y,N,995,4815,1265,188,79,47,550,401,389,,,,706,486,3.6100000000,120,10,1,3636,1205,33,400,471,421,,0.92,Brooklyn Bridegrooms,Washington Park I,,95,91,BRO,BR3,BR3 +1889,AA,CL6,CLS,,6,140,,60,78,,,N,N,779,4816,1247,171,95,36,507,609,304,,,,924,585,4.3900000000,114,9,4,3597,1274,33,551,610,488,,0.91,Columbus Solons,Recreation Park II,,95,94,COL,CL6,CL6 +1889,AA,CN2,CIN,,4,141,,76,63,,,N,N,897,4844,1307,197,96,52,452,511,462,,,,769,483,3.5000000000,114,3,8,3729,1270,35,475,562,440,,0.92,Cincinnati Red Stockings,League Park I in Cincinnati,,105,103,CIN,CN2,CN2 +1889,AA,KC2,KCC,,7,139,,55,82,,,N,N,852,4947,1256,162,76,18,430,626,472,,,,1031,583,4.3600000000,128,0,2,3612,1373,51,457,447,611,,0.89,Kansas City Cowboys,Exposition Park,,105,108,KCC,KC2,KC2 +1889,AA,LS2,LOU,,8,140,,27,111,,,N,N,632,4955,1249,170,75,22,320,521,203,,,,1091,655,4.8100000000,127,2,1,3678,1529,43,475,451,584,,0.90,Louisville Colonels,Eclipse Park I,,98,100,LOU,LS2,LS2 +1889,AA,PH4,PHA,,3,138,,75,58,,,N,N,880,4868,1339,239,65,43,534,496,252,,,,787,470,3.5300000000,130,9,1,3597,1200,35,509,479,465,,0.92,Philadelphia Athletics,Jefferson Street Grounds,,98,99,PHA,PH4,PH4 +1889,AA,SL4,STL,,2,141,,90,45,,,N,N,957,4939,1312,211,64,58,493,477,336,,,,680,412,3.0000000000,121,7,3,3711,1166,39,413,617,438,,0.92,St. Louis Browns,Sportsman's Park I,,113,110,STL,SL4,SL4 +1889,NL,BSN,ATL,,2,133,,83,45,,,N,N,826,4628,1251,196,54,42,471,450,331,,,,626,435,3.3600000000,121,10,4,3498,1152,41,413,497,413,,0.92,Boston Beaneaters,South End Grounds II,,106,104,BSN,BSN,BSN +1889,NL,CHN,CHC,,3,136,,67,65,,,N,N,867,4849,1274,184,66,79,518,516,243,,,,814,513,3.7300000000,123,6,2,3711,1313,71,408,434,463,,0.92,Chicago White Stockings,West Side Park I,,105,103,CHC,CHN,CHN +1889,NL,CL4,CLV,,6,136,,61,72,,,N,N,656,4673,1167,131,59,25,429,417,237,,,,720,484,3.6600000000,132,6,1,3573,1182,36,519,435,365,,0.93,Cleveland Spiders,National League Park,,104,105,CLV,CL4,CL4 +1889,NL,IN3,IND,,7,135,,59,75,,,N,N,819,4879,1356,228,35,62,377,447,252,,,,894,633,4.8500000000,109,3,2,3522,1365,73,420,408,419,,0.92,Indianapolis Hoosiers,Athletic Park II,,102,104,IND,IN3,IN3 +1889,NL,NY1,SFG,,1,131,,83,43,,,Y,Y,935,4671,1319,208,77,52,538,386,292,,,,708,444,3.4700000000,118,6,3,3453,1073,38,523,558,436,,0.92,New York Giants,Polo Grounds II,,104,101,NYG,NY1,NY1 +1889,NL,PHI,PHI,,4,130,,63,64,,,N,N,742,4695,1248,215,52,44,393,353,269,,,,748,512,4.0000000000,106,4,2,3459,1288,33,428,443,466,,0.91,Philadelphia Quakers,Philadelphia Baseball Grounds,,109,108,PHI,PHI,PHI +1889,NL,PIT,PIT,,5,134,,61,71,,,N,N,726,4748,1202,209,65,42,420,467,231,,,,801,566,4.5100000000,125,5,1,3390,1296,42,374,345,384,,0.93,Pittsburg Alleghenys,Recreation Park,,91,93,PIT,PIT,PIT +1889,NL,WS8,WNL,,8,127,,41,83,,,N,N,632,4395,1105,151,57,25,466,456,232,,,,892,574,4.6800000000,113,1,0,3309,1261,37,527,388,519,,0.90,Washington Nationals,Swampdoodle Grounds,,94,98,WHS,WS8,WS8 +1890,AA,BL3,BLO,,6,38,,15,19,,,N,N,182,1213,278,34,16,2,125,152,101,,,,192,140,4.0000000000,36,1,0,945,307,3,123,134,109,,0.92,Baltimore Orioles,Oriole Park,,109,110,BAL,BL3,BL3 +1890,AA,BR4,BRG,,9,100,,26,73,,,N,N,492,3475,769,116,47,13,328,456,182,,,,733,460,4.7100000000,96,0,0,2637,1011,21,421,230,394,,0.91,Brooklyn Gladiators,Ridgewood Park,,97,101,BRG,BR4,BR4 +1890,AA,CL6,CLS,,2,140,,79,55,,,N,N,831,4741,1225,159,77,16,545,557,353,,,,617,403,2.9900000000,120,14,3,3642,976,20,471,624,393,,0.93,Columbus Solons,Recreation Park II,,93,93,COL,CL6,CL6 +1890,AA,LS2,LOU,,1,136,,88,44,,,Y,N,819,4687,1310,156,65,15,410,460,341,,,,588,344,2.5700000000,114,13,7,3618,1120,18,293,587,380,,0.93,Louisville Colonels,Eclipse Park I,,98,99,LOU,LS2,LS2 +1890,AA,PH4,PHA,,8,132,,54,78,,,N,N,702,4490,1057,181,51,24,475,540,305,,,,945,657,5.2200000000,119,3,2,3396,1405,17,514,461,453,,0.91,Philadelphia Athletics,Jefferson Street Grounds,,98,99,PHA,PH4,PH4 +1890,AA,RC2,ROC,,5,133,,63,63,,,N,N,709,4553,1088,131,64,31,446,538,310,,,,711,459,3.5600000000,122,5,2,3483,1115,19,530,477,416,,0.92,Rochester Broncos,Culver Field I,,93,92,ROC,RC2,RC2 +1890,AA,SL4,STL,,3,139,,78,58,,,N,N,870,4800,1308,178,73,48,474,490,307,,,,736,487,3.6700000000,118,4,1,3585,1127,38,447,733,472,,0.91,St. Louis Browns,Sportsman's Park I,,114,111,STL,SL4,SL4 +1890,AA,SR2,SYS,,7,128,,55,72,,,N,N,698,4469,1158,151,59,14,457,482,292,,,,831,603,4.9800000000,115,5,0,3267,1158,28,518,454,391,,0.92,Syracuse Stars,Star Park II,,90,91,SYR,SR2,SR2 +1890,AA,TL2,TLM,,4,134,,68,64,,,N,N,739,4575,1152,152,108,24,486,558,421,,,,689,458,3.5600000000,122,4,2,3477,1122,23,429,533,419,,0.92,Toledo Maumees,Speranza Park,,103,102,TOL,TL2,TL2 +1890,NL,BRO,LAD,,1,129,,86,43,,,Y,N,884,4419,1166,184,75,43,517,361,349,,,,620,389,3.0600000000,115,6,2,3435,1102,27,401,403,319,,0.94,Brooklyn Bridegrooms,Washington Park II,121412,101,97,BRO,BRO,BRO +1890,NL,BSN,ATL,,5,134,,76,57,,,N,N,763,4722,1220,175,62,31,530,515,285,,,,593,386,2.9300000000,132,13,1,3561,1132,27,354,506,358,,0.93,Boston Beaneaters,South End Grounds II,147539,108,105,BSN,BSN,BSN +1890,NL,CHN,CHC,,2,139,,83,53,,,N,N,847,4891,1271,147,59,67,516,514,329,,,,692,445,3.2400000000,126,6,3,3711,1103,41,481,504,347,,0.93,Chicago Colts,West Side Park I,102536,104,102,CHC,CHN,CHN +1890,NL,CIN,CIN,,4,134,,77,55,,,N,N,753,4644,1204,150,120,27,433,377,312,,,,633,369,2.7900000000,124,9,1,3570,1097,41,407,488,381,,0.93,Cincinnati Reds,League Park I in Cincinnati,131980,101,101,CIN,CIN,CIN +1890,NL,CL4,CLV,,7,136,,44,88,,,N,N,630,4633,1073,132,59,21,497,474,152,,,,832,543,4.1300000000,129,2,0,3552,1322,33,462,306,405,,0.92,Cleveland Spiders,National League Park,47478,94,97,CLV,CL4,CL4 +1890,NL,NY1,SFG,,6,135,,63,68,,,N,N,713,4832,1250,208,89,25,350,479,289,,,,698,400,3.0600000000,115,6,1,3531,1029,14,607,612,440,,0.92,New York Giants,Polo Grounds II,60667,95,95,NYG,NY1,NY1 +1890,NL,PHI,PHI,,3,133,,78,53,,,N,N,823,4707,1267,220,78,23,522,403,335,,,,707,440,3.3200000000,122,9,2,3582,1210,22,486,507,396,,0.92,Philadelphia Phillies,Philadelphia Baseball Grounds,148366,103,102,PHI,PHI,PHI +1890,NL,PIT,PIT,,8,138,,23,113,,,N,N,597,4739,1088,160,43,20,408,458,208,,,,1235,780,5.9700000000,119,3,0,3528,1520,52,573,381,607,,0.89,Pittsburg Alleghenys,Recreation Park,16064,88,92,PIT,PIT,PIT +1890,PL,BFP,BFB,,8,134,,36,96,,,N,,793,4795,1249,180,64,20,541,367,160,,,,1199,775,6.1100000000,125,2,0,3423,1499,67,673,351,491,,0.91,Buffalo Bisons,,,92,97,BUF,BFP,BFP +1890,PL,BRP,BWW,,2,133,,76,56,,,N,,964,4887,1354,186,93,34,502,369,272,,,,893,520,3.9500000000,111,4,7,3552,1334,26,570,377,531,,0.90,Brooklyn Ward's Wonders,,,106,105,BWW,BRP,BRP +1890,PL,BSP,BRS,,1,130,,81,48,,,Y,,992,4626,1306,223,76,54,652,435,412,,,,767,479,3.7900000000,105,6,2,3411,1291,49,467,345,459,,0.91,Boston Reds,,,103,99,BOS,BSP,BSP +1890,PL,CHP,CHP,,4,138,,75,62,,,N,,886,4968,1311,200,95,31,492,410,276,,,,770,459,3.3900000000,124,5,2,3657,1238,27,503,460,492,,0.91,Chicago Pirates,,,104,103,CHI,CHP,CHP +1890,PL,CLP,CLI,,7,131,,55,75,,,N,,849,4804,1373,213,94,27,509,345,180,,,,1027,537,4.2300000000,115,1,0,3429,1386,45,571,325,532,,0.90,Cleveland Infants,,,92,94,CLE,CLP,CLP +1890,PL,NYP,NYI,,3,132,,74,57,,,N,,1018,4913,1393,204,97,66,486,364,231,,,,875,543,4.1700000000,111,3,6,3516,1219,37,569,449,449,,0.92,New York Giants,,,108,107,NYI,NYP,NYP +1890,PL,PHP,PHQ,,5,132,,68,63,,,N,,941,4855,1348,187,113,49,431,321,203,,,,855,519,4.0500000000,118,4,2,3462,1292,33,495,361,510,,0.91,Philadelphia Athletics,,,103,101,PHQ,PHP,PHP +1890,PL,PTP,PBB,,6,128,,60,68,,,N,,835,4577,1192,168,113,35,569,375,249,,,,892,523,4.2200000000,121,7,0,3348,1267,32,334,318,512,,0.90,Pittsburgh Burghers,,,92,92,PBB,PTP,PTP +1891,AA,BL3,BLO,,4,139,,71,64,,,N,,850,4771,1217,142,99,30,551,553,342,,,,798,464,3.4300000000,118,6,2,3651,1238,33,472,408,503,,0.91,Baltimore Orioles,Union Park,,101,100,BAL,BL3,BL3 +1891,AA,BS2,BRS,,1,139,,93,42,,,Y,,1028,4889,1341,163,100,52,651,499,447,,,,675,410,3.0300000000,108,9,7,3657,1158,42,497,524,392,,0.93,Boston Reds,Congress Street Grounds,,103,99,BOS,BS2,BS2 +1891,AA,CL6,CLS,,6,138,,61,76,,,N,,702,4697,1113,154,61,20,529,530,280,,,,777,505,3.7500000000,118,6,0,3639,1141,29,588,502,379,,0.93,Columbus Solons,Recreation Park II,,95,93,COL,CL6,CL6 +1891,AA,CN3,CKK,,7,102,,43,57,,,N,,549,3574,838,105,58,28,428,385,164,,,,643,344,3.4300000000,86,2,1,2706,921,20,446,331,389,,0.91,Cincinnati Kelly's Killers,East End Park,,108,110,CKK,CN3,CN3 +1891,AA,LS2,LOU,,8,141,,54,83,,,N,,713,4833,1247,130,69,17,443,473,230,,,,890,582,4.2700000000,128,9,1,3678,1353,33,464,485,458,,0.92,Louisville Colonels,Eclipse Park I,,97,97,LOU,LS2,LS2 +1891,AA,ML3,MLA,,3,36,,21,15,,,N,,227,1271,332,58,15,13,107,114,47,,,,156,86,2.5000000000,35,3,0,927,291,6,120,137,116,,0.92,Milwaukee Brewers,Athletic Field,,120,118,MIL,ML3,ML3 +1891,AA,PH4,PHQ,,5,143,,73,66,,,N,,817,5039,1301,182,123,55,447,548,149,,,,794,549,4.0100000000,135,3,0,3699,1274,35,520,533,389,,0.93,Philadelphia Athletics,Athletic Park,,103,103,PHA,PH4,PH4 +1891,AA,SL4,STL,,2,141,,85,51,,,N,,976,5005,1330,169,51,58,625,440,283,,,,753,444,3.2700000000,103,8,5,3666,1106,50,576,621,466,,0.92,St. Louis Browns,Sportsman's Park I,,108,108,STL,SL4,SL4 +1891,AA,WS9,WAS,,9,139,,44,91,,,N,,691,4715,1183,147,84,19,468,485,219,,,,1067,634,4.8300000000,123,2,2,3543,1420,44,566,486,589,,0.90,Washington Statesmen,Boundary Field,,95,100,WAS,WS9,WS9 +1891,NL,BRO,LAD,,6,137,,61,76,,,N,,765,4748,1233,200,69,23,464,435,337,,,,820,516,3.8600000000,121,8,3,3612,1272,40,459,407,432,,0.92,Brooklyn Grooms,Eastern Park,181477,99,99,BRO,BRO,BRO +1891,NL,BSN,ATL,,1,140,,87,51,,,Y,,847,4956,1264,181,80,54,532,538,289,,,,658,381,2.7600000000,126,9,6,3723,1223,51,364,525,358,,0.93,Boston Beaneaters,South End Grounds II,184472,112,109,BSN,BSN,BSN +1891,NL,CHN,CHC,,2,137,,82,53,,,N,,832,4873,1233,159,88,60,526,457,238,,,,730,470,3.4700000000,114,6,3,3660,1207,53,475,477,397,,0.93,Chicago Colts,South Side Park I,181431,106,105,CHC,CHN,CHN +1891,NL,CIN,CIN,,7,138,,56,81,,,N,,646,4791,1158,148,90,40,414,439,244,,,,790,480,3.5500000000,125,6,1,3654,1234,40,465,393,409,,0.93,Cincinnati Reds,League Park I in Cincinnati,97500,101,101,CIN,CIN,CIN +1891,NL,CL4,CLV,,5,141,,65,74,,,N,,835,5074,1294,183,88,22,519,464,242,,,,888,484,3.5000000000,118,1,3,3732,1371,24,466,400,485,,0.92,Cleveland Spiders,League Park I,132000,104,103,CLV,CL4,CL4 +1891,NL,NY1,SFG,,3,136,,71,61,,,N,,754,4833,1271,189,72,46,438,394,224,,,,711,400,2.9900000000,117,11,3,3612,1098,27,593,651,384,,0.93,New York Giants,Polo Grounds III,210568,96,96,NYG,NY1,NY1 +1891,NL,PHI,PHI,,4,138,,68,69,,,N,,756,4929,1244,180,51,21,482,412,232,,,,773,509,3.7300000000,105,3,5,3687,1280,29,505,343,443,,0.92,Philadelphia Phillies,Philadelphia Baseball Grounds,217282,103,102,PHI,PHI,PHI +1891,NL,PIT,PIT,,8,137,,55,80,,,N,,679,4794,1148,148,71,29,427,503,205,,,,744,384,2.8900000000,122,7,2,3591,1160,31,465,446,475,,0.91,Pittsburgh Pirates,Exposition Park,128000,97,98,PIT,PIT,PIT +1892,NL,BLN,BLO,,12,152,,46,101,,,N,,779,5296,1342,160,111,30,499,480,227,,,,1020,617,4.2800000000,131,2,2,3894,1537,51,536,437,584,,0.91,Baltimore Orioles,Union Park,93589,103,104,BLN,BLN,BLN +1892,NL,BRO,LAD,,3,158,,95,59,,,N,,935,5485,1439,183,105,30,629,506,409,,,,733,507,3.2500000000,132,12,5,4215,1285,26,600,597,398,,0.94,Brooklyn Grooms,Eastern Park,183727,96,96,BRO,BRO,BRO +1892,NL,BSN,ATL,,1,152,,102,48,,,Y,,862,5301,1324,203,51,34,526,488,338,,,,649,425,2.8600000000,142,15,1,4008,1156,41,460,509,454,,0.92,Boston Beaneaters,South End Grounds II,146421,109,107,BSN,BSN,BSN +1892,NL,CHN,CHC,,7,147,,70,76,,,N,,635,5063,1188,149,92,26,427,482,233,,,,735,456,3.1600000000,133,6,1,3894,1269,35,424,518,424,,0.93,Chicago Colts,South Side Park I,109067,94,94,CHC,CHN,CHN +1892,NL,CIN,CIN,,5,155,,82,68,,,N,,766,5349,1288,155,75,44,503,474,270,,,,731,485,3.1700000000,130,8,2,4131,1327,39,535,437,402,,0.93,Cincinnati Reds,League Park I in Cincinnati,196473,99,99,CIN,CIN,CIN +1892,NL,CL4,CLV,,2,153,,93,56,,,N,,855,5412,1375,196,96,26,552,536,225,,,,613,358,2.4100000000,140,11,2,4008,1178,28,413,472,406,,0.93,Cleveland Spiders,League Park I,139928,104,103,CLV,CL4,CL4 +1892,NL,LS3,LOU,,9,154,,63,89,,,N,,649,5334,1208,133,61,18,433,508,275,,,,804,500,3.3400000000,147,9,0,4038,1358,26,447,430,469,,0.92,Louisville Colonels,Eclipse Park I,131159,91,93,LOU,LS3,LS3 +1892,NL,NY1,SFG,,8,153,,71,80,,,N,,811,5291,1326,173,85,39,510,469,301,,,,826,483,3.2900000000,139,5,1,3966,1165,32,635,641,565,,0.91,New York Giants,Polo Grounds III,130566,99,98,NYG,NY1,NY1 +1892,NL,PHI,PHI,,4,155,,87,66,,,N,,860,5413,1420,225,95,50,528,515,216,,,,690,449,2.9300000000,131,10,5,4137,1297,24,492,502,393,,0.93,Philadelphia Phillies,Philadelphia Baseball Grounds,193731,100,99,PHI,PHI,PHI +1892,NL,PIT,PIT,,6,155,,80,73,,,N,,802,5469,1288,143,108,38,435,453,222,,,,796,464,3.1000000000,130,3,1,4041,1300,28,537,455,480,,0.92,Pittsburgh Pirates,Exposition Park,177205,100,100,PIT,PIT,PIT +1892,NL,SLN,STL,,11,155,,56,94,,,N,,703,5259,1187,138,53,45,607,491,209,,,,922,627,4.2000000000,139,4,1,4032,1466,47,543,478,453,,0.92,St. Louis Browns,Sportsman's Park I,192442,105,104,STL,SLN,SLN +1892,NL,WAS,WAS,,10,153,,58,93,,,N,,731,5204,1245,149,78,37,529,553,276,,,,869,506,3.4600000000,129,5,3,3945,1293,40,556,479,547,,0.91,Washington Senators,Boundary Field,128279,97,99,WHS,WSN,WSN +1893,NL,BLN,BLO,,8,130,,60,70,,,N,,820,4651,1281,164,86,27,537,323,233,,,,893,620,4.9700000000,104,1,2,3369,1325,29,534,275,384,,0.92,Baltimore Orioles,Union Park,143000,102,102,BLN,BLN,BLN +1893,NL,BRO,LAD,,7,130,,65,63,,,N,,775,4511,1200,173,83,45,473,296,213,,,,845,583,4.5500000000,109,3,3,3462,1262,41,547,297,385,,0.93,Brooklyn Grooms,Eastern Park,235000,95,95,BRO,BRO,BRO +1893,NL,BSN,ATL,,1,131,,86,43,,,Y,,1008,4678,1358,178,50,65,561,292,243,,,,795,572,4.4300000000,114,2,2,3489,1314,66,402,253,353,,0.93,Boston Beaneaters,South End Grounds II,193300,108,106,BSN,BSN,BSN +1893,NL,CHN,CHC,,9,128,,56,71,,,N,,829,4664,1299,186,93,32,465,262,255,,,,874,597,4.8100000000,101,4,5,3351,1278,26,553,273,421,,0.92,Chicago Colts,South Side Park I,223500,103,104,CHC,CHN,CHN +1893,NL,CIN,CIN,,6,131,,65,63,,,N,,759,4617,1195,161,65,29,532,256,238,,,,814,593,4.5500000000,97,4,5,3516,1305,38,549,258,321,,0.94,Cincinnati Reds,League Park I in Cincinnati,194250,102,103,CIN,CIN,CIN +1893,NL,CL4,CLV,,3,129,,73,55,,,N,,976,4747,1425,222,98,32,532,229,252,,,,839,532,4.2000000000,110,2,2,3420,1361,35,356,242,389,,0.93,Cleveland Spiders,League Park I,130000,106,105,CLV,CL4,CL4 +1893,NL,LS3,LOU,,11,126,,50,75,,,N,,759,4566,1185,177,73,19,485,306,203,,,,942,708,5.9000000000,113,4,1,3240,1431,38,479,190,328,,0.93,Louisville Colonels,Eclipse Park II,53683,92,94,LOU,LS3,LS3 +1893,NL,NY1,SFG,,5,136,,68,64,,,N,,941,4858,1424,182,101,61,504,279,299,,,,845,577,4.2900000000,111,6,4,3633,1271,36,581,395,432,,0.92,New York Giants,Polo Grounds III,290000,101,100,NYG,NY1,NY1 +1893,NL,PHI,PHI,,4,133,,72,57,,,N,,1011,5151,1553,246,90,80,468,335,202,,,,841,618,4.6800000000,107,4,2,3567,1359,30,521,283,318,,0.94,Philadelphia Phillies,Philadelphia Baseball Grounds,293019,102,101,PHI,PHI,PHI +1893,NL,PIT,PIT,,2,131,,81,48,,,N,,970,4834,1447,176,127,37,537,273,210,,,,766,529,4.0800000000,104,8,2,3501,1232,29,504,280,346,,0.93,Pittsburgh Pirates,Exposition Park,184000,98,98,PIT,PIT,PIT +1893,NL,SLN,STL,,10,135,,57,75,,,N,,745,4879,1288,152,98,10,524,251,250,,,,829,544,4.0600000000,114,3,4,3621,1292,38,542,301,398,,0.93,St. Louis Browns,Robison Field,195000,100,101,STL,SLN,SLN +1893,NL,WAS,WAS,,12,130,,40,89,,,N,,722,4742,1260,180,83,23,524,237,154,,,,1032,704,5.5600000000,110,2,0,3417,1485,54,574,292,497,,0.91,Washington Senators,Boundary Field,90000,97,99,WHS,WSN,WSN +1894,NL,BLN,BLO,,1,129,,89,39,,,Y,,1171,4799,1647,271,150,33,516,200,324,,,,819,620,5.0000000000,97,1,11,3348,1371,31,472,275,293,,0.94,Baltimore Orioles,Union Park,328000,104,103,BLN,BLN,BLN +1894,NL,BRO,LAD,,5,134,,70,61,,,N,,1021,4816,1507,228,130,42,466,294,282,,,,1007,711,5.5100000000,105,3,5,3486,1447,41,555,285,390,,0.92,Brooklyn Grooms,Eastern Park,214000,93,93,BRO,BRO,BRO +1894,NL,BSN,ATL,,3,133,,83,49,,,N,,1220,5011,1658,272,94,103,535,261,241,,,,1002,701,5.4100000000,108,3,1,3498,1529,89,411,262,415,,0.92,Boston Beaneaters,South End Grounds II / Congress Street Grounds / South End Grounds III,152800,113,111,BSN,BSN,BSN +1894,NL,CHN,CHC,,8,135,,57,75,,,N,,1041,4960,1555,265,86,65,496,298,327,,,,1066,725,5.6800000000,117,0,0,3444,1561,43,557,281,452,,0.91,Chicago Colts,West Side Park II,239000,106,106,CHC,CHN,CHN +1894,NL,CIN,CIN,,10,132,,55,75,,,N,,910,4671,1374,224,67,61,508,252,215,,,,1085,763,5.9900000000,110,4,3,3441,1585,85,491,219,420,,0.92,Cincinnati Reds,League Park II in Cincinnati,158000,103,104,CIN,CIN,CIN +1894,NL,CL4,CLV,,6,130,,68,61,,,N,,932,4764,1442,241,90,37,471,301,220,,,,896,621,4.9700000000,106,6,1,3372,1390,54,435,254,344,,0.93,Cleveland Spiders,League Park I,82000,104,103,CLV,CL4,CL4 +1894,NL,LS3,LOU,,12,130,,36,94,,,N,,692,4482,1206,173,88,42,350,364,217,,,,1001,664,5.4500000000,113,2,1,3288,1462,39,475,258,428,,0.92,Louisville Colonels,Eclipse Park II,75000,93,96,LOU,LS3,LS3 +1894,NL,NY1,SFG,,2,137,,88,44,,,N,,940,4806,1446,197,96,43,476,217,319,,,,789,516,3.8300000000,111,5,5,3636,1292,37,539,395,443,,0.92,New York Giants,Polo Grounds III,387000,99,99,NYG,NY1,NY1 +1894,NL,PHI,PHI,,4,129,,71,57,,,N,,1143,4967,1732,252,131,40,496,245,273,,,,966,704,5.6300000000,102,3,4,3375,1482,62,469,262,338,,0.93,Philadelphia Phillies,Philadelphia Baseball Grounds,352773,96,94,PHI,PHI,PHI +1894,NL,PIT,PIT,,7,132,,65,65,,,N,,955,4676,1458,222,124,48,434,208,256,,,,972,724,5.6000000000,106,2,0,3492,1552,39,457,304,354,,0.93,Pittsburgh Pirates,Exposition Park,159000,99,98,PIT,PIT,PIT +1894,NL,SLN,STL,,9,133,,56,76,,,N,,771,4610,1320,171,113,54,442,289,190,,,,953,682,5.2900000000,114,2,0,3483,1418,48,500,319,426,,0.92,St. Louis Browns,Robison Field,155000,100,102,STL,SLN,SLN +1894,NL,WAS,WAS,,11,132,,45,87,,,N,,882,4581,1317,218,118,59,617,375,249,,,,1122,678,5.5100000000,101,0,4,3321,1573,59,446,190,499,,0.90,Washington Senators,Boundary Field,125000,97,99,WHS,WSN,WSN +1895,NL,BLN,BLO,,1,132,,87,43,,,Y,,1009,4725,1530,235,89,25,355,243,310,,,,646,479,3.8000000000,104,10,4,3402,1216,31,430,244,288,,0.94,Baltimore Orioles,Union Park,293000,103,100,BLN,BLN,BLN +1895,NL,BRO,LAD,,5,133,,71,60,,,N,,867,4717,1330,189,77,39,397,318,183,,,,834,631,4.9400000000,103,5,6,3450,1360,41,395,216,325,,0.94,Brooklyn Grooms,Eastern Park,230000,92,92,BRO,BRO,BRO +1895,NL,BSN,ATL,,6,132,,71,60,,,N,,907,4715,1369,197,57,54,500,236,199,,,,826,557,4.2700000000,116,4,4,3525,1364,56,363,370,364,,0.93,Boston Beaneaters,South End Grounds III,242000,105,104,BSN,BSN,BSN +1895,NL,CHN,CHC,,4,133,,72,58,,,N,,866,4708,1401,171,85,55,422,344,260,,,,854,597,4.6700000000,119,3,1,3450,1422,38,432,297,401,,0.92,Chicago Colts,West Side Park II,382300,107,107,CHC,CHN,CHN +1895,NL,CIN,CIN,,8,132,,66,64,,,N,,903,4684,1395,235,105,36,414,249,326,,,,854,613,4.8100000000,97,2,6,3441,1451,39,362,245,377,,0.93,Cincinnati Reds,League Park II in Cincinnati,281000,104,104,CIN,CIN,CIN +1895,NL,CL4,CLV,,2,131,,84,46,,,N,,917,4658,1423,194,67,29,472,361,187,,,,720,497,3.9100000000,108,6,3,3429,1272,33,346,326,348,,0.93,Cleveland Spiders,League Park I,143000,106,104,CLV,CL4,CL4 +1895,NL,LS3,LOU,,12,133,,35,96,,,N,,698,4724,1320,171,73,34,346,323,156,,,,1090,732,5.9000000000,104,3,1,3351,1520,40,470,245,477,,0.91,Louisville Colonels,Eclipse Park II,92000,94,97,LOU,LS3,LS3 +1895,NL,NY1,SFG,,9,132,,66,65,,,N,,852,4605,1324,191,90,32,454,292,292,,,,834,575,4.5100000000,115,6,1,3441,1359,34,415,409,438,,0.92,New York Giants,Polo Grounds III,240000,98,97,NYG,NY1,NY1 +1895,NL,PHI,PHI,,3,133,,78,53,,,N,,1068,5037,1664,272,73,61,463,262,276,,,,957,706,5.4700000000,106,2,7,3483,1467,36,485,330,369,,0.93,Philadelphia Phillies,Baker Bowl,474971,100,100,PHI,PHI,PHI +1895,NL,PIT,PIT,,7,134,,71,61,,,N,,811,4645,1349,190,89,26,376,299,257,,,,787,527,4.0500000000,106,4,6,3513,1263,17,500,382,392,,0.93,Pittsburgh Pirates,Exposition Park,188000,95,95,PIT,PIT,PIT +1895,NL,SLN,STL,,11,135,,39,92,,,N,,747,4781,1344,155,88,38,384,279,205,,,,1032,737,5.7600000000,105,1,1,3456,1562,64,439,280,380,,0.93,St. Louis Browns,Robison Field,170000,99,101,STL,SLN,SLN +1895,NL,WAS,WAS,,10,132,,43,85,,,N,,837,4577,1314,207,101,55,518,396,237,,,,1048,646,5.2800000000,99,0,5,3303,1507,55,465,258,444,,0.91,Washington Senators,Boundary Field,153000,99,101,WHS,WSN,WSN +1896,NL,BLN,BLO,,1,132,,90,39,,,Y,,995,4719,1548,207,100,23,386,201,441,,,,662,476,3.6700000000,115,9,1,3504,1281,22,339,302,296,,0.94,Baltimore Orioles,Union Park,249448,102,98,BLN,BLN,BLN +1896,NL,BRO,LAD,,10,133,,58,73,,,N,,692,4548,1292,174,87,28,344,269,198,,,,764,540,4.2500000000,97,3,1,3432,1353,39,400,259,297,,0.94,Brooklyn Bridegrooms,Eastern Park,201000,94,95,BRO,BRO,BRO +1896,NL,BSN,ATL,,4,132,,74,57,,,N,,860,4717,1416,175,74,36,414,274,241,,,,761,485,3.7800000000,110,6,3,3465,1254,57,397,277,368,,0.93,Boston Beaneaters,South End Grounds III,240000,106,104,BSN,BSN,BSN +1896,NL,CHN,CHC,,5,132,,71,57,,,N,,815,4582,1311,182,97,34,409,290,332,,,,799,569,4.4100000000,118,2,1,3483,1302,30,467,353,367,,0.93,Chicago Colts,West Side Park II,317500,104,104,CHC,CHN,CHN +1896,NL,CIN,CIN,,3,128,,77,50,,,N,,783,4360,1283,204,73,20,382,226,350,,,,620,452,3.6700000000,105,12,4,3324,1240,27,310,219,252,,0.95,Cincinnati Reds,League Park II in Cincinnati,373000,107,106,CIN,CIN,CIN +1896,NL,CL4,CLV,,2,135,,80,48,,,N,,840,4856,1463,207,72,28,436,316,175,,,,650,459,3.4600000000,113,9,5,3585,1363,27,280,336,280,,0.95,Cleveland Spiders,League Park I,152000,106,104,CLV,CL4,CL4 +1896,NL,LS3,LOU,,12,134,,38,93,,,N,,653,4588,1197,142,80,37,371,427,195,,,,997,653,5.1200000000,108,1,4,3444,1398,48,541,288,475,,0.91,Louisville Colonels,Eclipse Park II,133000,96,99,LOU,LS3,LS3 +1896,NL,NY1,SFG,,7,133,,64,67,,,N,,829,4661,1383,159,87,40,439,271,274,,,,821,573,4.5400000000,104,1,2,3408,1303,33,403,312,365,,0.93,New York Giants,Polo Grounds III,274000,97,96,NYG,NY1,NY1 +1896,NL,PHI,PHI,,8,130,,62,68,,,N,,890,4680,1382,234,84,49,438,297,191,,,,891,645,5.2000000000,107,3,2,3351,1473,39,387,243,313,,0.94,Philadelphia Phillies,Baker Bowl,357025,99,99,PHI,PHI,PHI +1896,NL,PIT,PIT,,6,131,,66,63,,,N,,787,4701,1371,169,94,27,387,286,217,,,,741,554,4.3000000000,108,8,1,3477,1286,18,439,362,317,,0.94,Pittsburgh Pirates,Exposition Park,197000,96,96,PIT,PIT,PIT +1896,NL,SLN,STL,,11,131,,40,90,,,N,,593,4520,1162,134,78,37,332,300,185,,,,929,669,5.3300000000,115,1,1,3390,1448,40,456,279,345,,0.93,St. Louis Browns,Robison Field,184000,96,100,STL,SLN,SLN +1896,NL,WAS,WAS,,9,133,,58,73,,,N,,818,4639,1328,179,79,45,516,365,258,,,,920,582,4.6100000000,106,2,3,3408,1435,24,435,292,398,,0.92,Washington Senators,Boundary Field,223000,100,101,WHS,WSN,WSN +1897,NL,BLN,BLO,,2,136,,90,40,,,N,,964,4872,1584,243,66,19,437,256,401,,,,674,472,3.5500000000,118,3,0,3591,1296,18,382,361,277,,0.95,Baltimore Orioles,Union Park,273046,100,97,BLN,BLN,BLN +1897,NL,BRO,LAD,,7,136,,61,71,,,N,,802,4810,1343,202,72,24,351,255,187,,,,845,610,4.6000000000,114,4,2,3582,1417,34,410,256,364,,0.93,Brooklyn Bridegrooms,Eastern Park,220831,94,95,BRO,BRO,BRO +1897,NL,BSN,ATL,,1,135,,93,39,,,Y,,1025,4937,1574,230,83,45,423,262,233,,,,665,484,3.6500000000,115,8,7,3582,1273,39,393,329,272,,0.95,Boston Beaneaters,South End Grounds III,334800,106,104,BSN,BSN,BSN +1897,NL,CHN,CHC,,9,138,,59,73,,,N,,832,4803,1356,189,97,38,430,317,264,,,,894,602,4.5300000000,131,2,1,3591,1485,30,433,361,394,,0.93,Chicago Colts,West Side Park II,327160,104,104,CHC,CHN,CHN +1897,NL,CIN,CIN,,4,134,,76,56,,,N,,763,4524,1311,219,69,22,380,218,194,,,,705,525,4.0900000000,100,4,2,3468,1375,18,329,270,273,,0.94,Cincinnati Reds,League Park II in Cincinnati,336800,107,106,CIN,CIN,CIN +1897,NL,CL4,CLV,,5,132,,69,62,,,N,,773,4604,1374,192,88,16,435,344,181,,,,680,491,3.9500000000,111,6,0,3357,1297,32,289,277,257,,0.95,Cleveland Spiders,League Park I,115250,110,109,CLV,CL4,CL4 +1897,NL,LS3,LOU,,11,134,,52,78,,,N,,669,4520,1197,160,70,40,370,453,195,,,,859,559,4.4200000000,114,2,0,3414,1363,39,459,267,395,,0.92,Louisville Colonels,Eclipse Park II,145210,97,99,LOU,LS3,LS3 +1897,NL,NY1,SFG,,3,137,,83,48,,,N,,895,4844,1449,188,84,31,404,327,328,,,,695,458,3.4700000000,118,8,3,3561,1214,26,486,456,397,,0.93,New York Giants,Polo Grounds III,390340,97,96,NYG,NY1,NY1 +1897,NL,PHI,PHI,,10,134,,55,77,,,N,,752,4756,1392,213,83,40,399,299,163,,,,792,590,4.6000000000,115,4,2,3465,1415,28,364,253,296,,0.94,Philadelphia Phillies,Baker Bowl,290027,97,97,PHI,PHI,PHI +1897,NL,PIT,PIT,,8,135,,60,71,,,N,,676,4590,1266,140,108,25,359,334,170,,,,835,598,4.6700000000,112,2,2,3459,1397,22,318,342,346,,0.93,Pittsburgh Pirates,Exposition Park,165950,96,97,PIT,PIT,PIT +1897,NL,SLN,STL,,12,132,,29,102,,,N,,588,4642,1277,149,67,31,354,314,172,,,,1083,778,6.2100000000,109,1,1,3381,1584,54,453,207,375,,0.93,St. Louis Browns,Robison Field,136400,98,102,STL,SLN,SLN +1897,NL,WAS,WAS,,6,135,,61,71,,,N,,781,4636,1376,194,77,36,374,348,208,,,,793,511,4.0100000000,102,7,6,3444,1383,27,400,348,369,,0.93,Washington Senators,Boundary Field,151028,99,101,WHS,WSN,WSN +1898,NL,BLN,BLO,,2,154,,96,53,,,N,,933,5242,1584,154,77,12,519,316,250,,,,623,426,2.9000000000,138,12,0,3969,1236,17,400,422,326,,0.94,Baltimore Orioles,Union Park,123416,102,99,BLN,BLN,BLN +1898,NL,BRO,LAD,,10,149,,54,91,,,N,,638,5126,1314,156,66,17,328,314,130,,,,811,578,4.0100000000,134,1,0,3894,1446,34,476,294,334,,0.94,Brooklyn Bridegrooms,Washington Park III,122514,100,99,BRO,BRO,BRO +1898,NL,BSN,ATL,,1,152,,102,47,,,Y,,872,5276,1531,190,55,53,405,303,172,,,,614,444,2.9800000000,127,9,8,4020,1186,37,470,432,299,,0.95,Boston Beaneaters,South End Grounds III,229275,105,102,BSN,BSN,BSN +1898,NL,CHN,CHC,,4,152,,85,65,,,N,,828,5219,1431,175,84,18,476,394,220,,,,679,422,2.8300000000,137,13,0,4026,1357,17,364,323,412,,0.93,Chicago Orphans,West Side Park II,424352,100,99,CHC,CHN,CHN +1898,NL,CIN,CIN,,3,157,,92,60,,,N,,831,5334,1448,207,101,19,455,300,165,,,,740,539,3.5000000000,131,10,2,4155,1484,16,449,294,325,,0.95,Cincinnati Reds,League Park II in Cincinnati,336378,107,106,CIN,CIN,CIN +1898,NL,CL4,CLV,,5,156,,81,68,,,N,,730,5246,1379,162,56,18,545,306,93,,,,683,474,3.2000000000,142,9,0,4002,1429,26,309,339,296,,0.95,Cleveland Spiders,League Park I,70496,96,95,CLV,CL4,CL4 +1898,NL,LS3,LOU,,9,154,,70,81,,,N,,728,5193,1389,150,71,32,375,429,235,,,,833,628,4.2400000000,137,4,0,4002,1457,33,470,271,382,,0.93,Louisville Colonels,Eclipse Park II,128980,99,99,LOU,LS3,LS3 +1898,NL,NY1,SFG,,7,157,,77,73,,,N,,837,5349,1422,190,86,34,428,372,214,,,,800,517,3.4400000000,141,9,1,4059,1359,21,587,558,447,,0.93,New York Giants,Polo Grounds III,265414,97,96,NYG,NY1,NY1 +1898,NL,PHI,PHI,,6,150,,78,71,,,N,,823,5118,1431,238,81,33,472,382,182,,,,784,532,3.7200000000,129,10,0,3864,1440,23,399,325,379,,0.93,Philadelphia Phillies,Baker Bowl,265414,96,95,PHI,PHI,PHI +1898,NL,PIT,PIT,,8,152,,72,76,,,N,,634,5087,1313,140,88,14,336,343,107,,,,694,501,3.4100000000,131,10,3,3969,1400,14,346,330,340,,0.94,Pittsburgh Pirates,Exposition Park,150900,98,99,PIT,PIT,PIT +1898,NL,SLN,STL,,12,154,,39,111,,,N,,571,5214,1290,149,55,13,383,402,104,,,,929,666,4.5300000000,133,0,2,3972,1584,32,372,288,388,,0.93,St. Louis Browns,Robison Field,151700,102,105,STL,SLN,SLN +1898,NL,WAS,WAS,,11,155,,51,101,,,N,,704,5257,1423,177,80,36,370,386,197,,,,939,656,4.5200000000,129,0,1,3921,1577,29,450,371,442,,0.92,Washington Senators,Boundary Field,103250,100,101,WHS,WSN,WSN +1899,NL,BLN,BLO,,4,152,,86,62,,,N,,827,5073,1509,204,71,17,418,383,364,,,,691,480,3.3100000000,132,10,4,3912,1403,13,349,294,308,,0.94,Baltimore Orioles,Union Park,121935,105,103,BLN,BLN,BLN +1899,NL,BRO,LAD,,1,150,,101,47,,,Y,,892,4937,1436,178,97,27,477,263,271,,,,658,458,3.2500000000,121,9,9,3807,1320,32,463,331,314,,0.94,Brooklyn Superbas,Washington Park III,269641,102,102,BRO,BRO,BRO +1899,NL,BSN,ATL,,2,153,,95,57,,,N,,858,5290,1517,178,90,39,431,269,185,,,,645,488,3.2600000000,138,13,4,4044,1273,44,432,385,295,,0.95,Boston Beaneaters,South End Grounds III,200384,109,108,BSN,BSN,BSN +1899,NL,CHN,CHC,,8,152,,75,73,,,N,,812,5148,1428,173,82,27,406,342,247,,,,763,498,3.3700000000,147,8,1,3993,1433,20,330,313,428,,0.93,Chicago Orphans,West Side Park II,352130,97,97,CHC,CHN,CHN +1899,NL,CIN,CIN,,6,156,,83,67,,,N,,856,5225,1439,194,105,13,485,295,228,,,,770,560,3.7000000000,130,8,5,4083,1484,26,370,360,339,,0.94,Cincinnati Reds,League Park II in Cincinnati,259536,102,102,CIN,CIN,CIN +1899,NL,CL4,CLV,,12,154,,20,134,,,N,,529,5279,1333,142,50,12,289,280,127,,,,1252,895,6.3700000000,138,0,0,3792,1844,43,527,215,388,,0.93,Cleveland Spiders,League Park I,6088,89,96,CLV,CL4,CL4 +1899,NL,LS3,LOU,,9,155,,75,77,,,N,,827,5307,1484,192,68,40,436,375,233,,,,775,518,3.4500000000,134,5,2,4053,1509,33,323,287,382,,0.93,Louisville Colonels,Eclipse Park II,109319,100,100,LOU,LS3,LS3 +1899,NL,NY1,SFG,,10,152,,60,90,,,N,,734,5092,1431,161,65,23,387,360,234,,,,863,609,4.2900000000,138,4,0,3834,1454,19,628,397,433,,0.93,New York Giants,Polo Grounds III,121384,97,97,NYG,NY1,NY1 +1899,NL,PHI,PHI,,3,154,,94,58,,,N,,916,5353,1613,241,83,31,441,341,212,,,,743,514,3.4700000000,129,15,2,3999,1398,17,370,281,379,,0.94,Philadelphia Phillies,Baker Bowl,388933,97,96,PHI,PHI,PHI +1899,NL,PIT,PIT,,7,154,,76,73,,,N,,834,5450,1574,196,122,27,384,345,179,,,,765,546,3.6000000000,117,9,4,4092,1464,27,437,334,361,,0.94,Pittsburgh Pirates,Exposition Park,251834,100,99,PIT,PIT,PIT +1899,NL,SLN,STL,,5,155,,84,67,,,N,,819,5304,1514,172,88,47,468,262,210,,,,739,500,3.3600000000,134,7,1,4020,1476,41,321,331,399,,0.93,St. Louis Perfectos,Robison Field,373909,102,103,STL,SLN,SLN +1899,NL,WAS,WAS,,11,155,,54,98,,,N,,743,5256,1429,162,87,47,350,341,176,,,,983,712,4.9300000000,131,3,0,3900,1649,35,422,328,403,,0.93,Washington Senators,Boundary Field,86392,99,101,WHS,WSN,WSN +1900,NL,BRO,LAD,,1,142,,82,54,,,Y,,816,4860,1423,199,81,26,421,272,274,,,,722,529,3.8900000000,104,8,4,3675,1370,30,405,300,303,102,0.94,Brooklyn Superbas,Washington Park III,183000,106,104,BRO,BRO,BRO +1900,NL,BSN,ATL,,4,142,,66,72,,,N,,778,4952,1403,163,68,48,395,278,182,,,,739,513,3.7200000000,116,8,2,3720,1263,59,463,340,271,86,0.95,Boston Beaneaters,South End Grounds III,202000,112,111,BSN,BSN,BSN +1900,NL,CHN,CHC,,6,146,,65,75,,,N,,635,4907,1276,202,51,33,343,383,189,,,,751,456,3.2300000000,137,9,1,3813,1375,21,324,357,418,98,0.93,Chicago Orphans,West Side Park II,248577,96,98,CHC,CHN,CHN +1900,NL,CIN,CIN,,7,144,,62,77,,,N,,703,5026,1335,178,83,33,333,408,183,,,,745,542,3.8300000000,118,9,1,3822,1383,28,404,399,341,120,0.94,Cincinnati Reds,League Park II in Cincinnati,170000,98,99,CIN,CIN,CIN +1900,NL,NY1,SFG,,8,141,,60,78,,,N,,713,4724,1317,177,61,23,369,343,236,,,,823,531,3.9600000000,113,4,0,3621,1423,26,442,277,439,124,0.92,New York Giants,Polo Grounds III,190000,95,98,NYG,NY1,NY1 +1900,NL,PHI,PHI,,3,141,,75,63,,,N,,810,4969,1439,187,82,29,440,374,205,,,,792,571,4.1200000000,116,7,3,3744,1506,29,402,284,330,125,0.94,Philadelphia Phillies,Baker Bowl,301913,99,98,PHI,PHI,PHI +1900,NL,PIT,PIT,,2,140,,79,60,,,N,,733,4817,1312,185,100,26,327,321,174,,,,612,418,3.0600000000,114,11,1,3687,1232,24,295,415,322,106,0.94,Pittsburgh Pirates,Exposition Park,264000,101,98,PIT,PIT,PIT +1900,NL,SLN,STL,,5,142,,65,75,,,N,,744,4877,1420,141,81,36,406,318,243,,,,748,507,3.7500000000,117,12,0,3651,1373,37,299,325,331,73,0.94,St. Louis Cardinals,Robison Field,270000,99,98,STL,SLN,SLN +1901,AL,BLA,NYY,,5,135,66,68,65,,,N,,760,4589,1348,179,111,24,369,377,207,,,,750,480,3.7300000000,115,4,3,3474,1313,21,344,271,401,76,0.92,Baltimore Orioles,Oriole Park,141952,104,105,BLA,BLA,BLA +1901,AL,BOS,BOS,,2,138,69,79,57,,,N,,759,4866,1353,183,104,37,331,282,157,,,,608,411,3.0400000000,123,7,1,3651,1178,33,294,396,329,104,0.94,Boston Americans,Huntington Avenue Grounds,289448,98,96,BOS,BOS,BOS +1901,AL,CHA,CHW,,1,137,71,83,53,,,Y,,819,4725,1303,173,89,32,475,337,280,,,,631,403,2.9800000000,110,11,2,3654,1250,27,312,394,345,100,0.94,Chicago White Sox,South Side Park II,354350,97,95,CHW,CHA,CHA +1901,AL,CLE,CLE,,7,138,69,54,82,,,N,,667,4833,1311,197,68,12,243,326,125,,,,831,541,4.1200000000,122,7,4,3546,1365,22,464,334,329,99,0.94,Cleveland Blues,League Park I,131380,96,97,CLE,CLE,CLE +1901,AL,DET,DET,,3,136,70,74,61,,,N,,741,4676,1303,180,80,29,380,346,204,,,,694,436,3.3000000000,118,8,2,3564,1328,22,313,307,410,127,0.93,Detroit Tigers,Bennett Park,259430,105,105,DET,DET,DET +1901,AL,MLA,BAL,,8,139,70,48,89,,,N,,641,4795,1250,192,66,26,325,384,176,,,,828,549,4.0600000000,107,3,4,3654,1383,32,395,376,393,106,0.93,Milwaukee Brewers,Lloyd Street Grounds,139034,95,98,MLA,MLA,MLA +1901,AL,PHA,OAK,,4,137,66,74,62,,,N,,805,4882,1409,239,87,35,301,344,173,,,,761,533,4.0000000000,124,6,1,3600,1346,20,374,350,331,93,0.94,Philadelphia Athletics,Columbia Park,206329,104,103,PHA,PHA,PHA +1901,AL,WS1,MIN,,6,138,68,61,72,,,N,,682,4772,1282,191,83,33,356,340,127,,,,771,538,4.0900000000,118,8,2,3549,1396,51,284,308,323,97,0.94,Washington Senators,American League Park I,161661,98,100,WSH,WS1,WS1 +1901,NL,BRO,LAD,,3,137,68,79,57,,,N,,744,4879,1399,206,93,32,312,449,178,,,,600,423,3.1400000000,111,7,5,3639,1244,18,435,583,281,99,0.95,Brooklyn Superbas,Washington Park III,198200,103,101,BRO,BRO,BRO +1901,NL,BSN,ATL,,5,140,70,69,69,,,N,,531,4746,1180,135,36,28,303,519,158,,,,556,407,2.9000000000,128,11,0,3789,1196,29,349,558,279,89,0.95,Boston Beaneaters,South End Grounds III,146502,109,109,BSN,BSN,BSN +1901,NL,CHN,CHC,,6,140,70,53,86,,,N,,578,4844,1250,153,61,18,314,532,204,,,,699,459,3.3300000000,131,2,0,3723,1348,27,324,586,336,87,0.94,Chicago Orphans,West Side Park II,205071,96,98,CHC,CHN,CHN +1901,NL,CIN,CIN,,8,142,72,52,87,,,N,,561,4914,1232,173,70,38,323,584,137,,,,818,586,4.1700000000,126,4,0,3795,1469,51,365,542,355,102,0.94,Cincinnati Reds,League Park II in Cincinnati,205728,94,96,CIN,CIN,CIN +1901,NL,NY1,SFG,,7,141,71,52,85,,,N,,544,4839,1225,167,46,19,303,575,133,,,,755,530,3.8700000000,118,11,1,3696,1389,24,377,542,343,81,0.94,New York Giants,Polo Grounds III,297650,96,100,NYG,NY1,NY1 +1901,NL,PHI,PHI,,2,140,69,83,57,,,N,,668,4793,1275,194,58,24,430,549,199,,,,543,397,2.8700000000,125,15,2,3738,1221,19,259,480,262,65,0.95,Philadelphia Phillies,Baker Bowl,234937,102,102,PHI,PHI,PHI +1901,NL,PIT,PIT,,1,140,69,90,49,,,Y,,776,4913,1407,182,92,29,386,493,203,,,,534,357,2.5800000000,119,15,4,3732,1198,20,244,505,285,97,0.95,Pittsburgh Pirates,Exposition Park,251955,103,98,PIT,PIT,PIT +1901,NL,SLN,STL,,4,142,72,76,64,,,N,,792,5039,1430,187,94,39,314,540,190,,,,689,519,3.6800000000,118,5,5,3807,1333,39,332,445,305,108,0.94,St. Louis Cardinals,Robison Field,379988,95,96,STL,SLN,SLN +1902,AL,BLA,NYY,,8,141,64,50,88,,,N,,715,4760,1318,202,107,33,417,429,189,,,,848,582,4.3300000000,119,3,1,3630,1531,30,354,258,347,109,0.93,Baltimore Orioles,Oriole Park,174606,104,105,BLA,BLA,BLA +1902,AL,BOS,BOS,,3,138,71,77,60,,,N,,664,4875,1356,195,95,42,275,375,132,,,,600,415,3.0200000000,123,6,1,3714,1217,27,326,431,255,101,0.95,Boston Americans,Huntington Avenue Grounds,348567,103,100,BOS,BOS,BOS +1902,AL,CHA,CHW,,4,138,72,74,60,,,N,,675,4654,1248,170,50,14,411,381,265,,,,602,463,3.4100000000,116,11,0,3663,1269,30,331,346,259,125,0.95,Chicago White Sox,South Side Park II,337898,96,95,CHW,CHA,CHA +1902,AL,CLE,CLE,,5,137,65,69,67,,,N,,686,4840,1401,248,68,33,308,356,140,,,,667,439,3.2800000000,116,16,3,3612,1199,26,411,361,287,96,0.95,Cleveland Bronchos,League Park I,275395,96,96,CLE,CLE,CLE +1902,AL,DET,DET,,7,137,67,52,83,,,N,,566,4644,1167,141,55,22,359,287,130,,,,657,471,3.5600000000,116,9,3,3570,1267,20,370,245,332,111,0.94,Detroit Tigers,Bennett Park,189469,105,105,DET,DET,DET +1902,AL,PHA,OAK,,1,137,73,83,53,,,Y,,775,4762,1369,235,67,38,343,293,201,,,,636,445,3.2900000000,114,5,2,3648,1292,33,368,455,266,75,0.95,Philadelphia Athletics,Columbia Park,420078,104,103,PHA,PHA,PHA +1902,AL,SLA,BAL,,2,140,73,78,58,,,N,,619,4736,1254,208,61,29,373,327,137,,,,607,462,3.3400000000,120,7,2,3732,1273,36,343,348,274,122,0.95,St. Louis Browns,Sportsman's Park III,272283,99,99,SLB,SLA,SLA +1902,AL,WS1,MIN,,6,138,68,61,75,,,N,,707,4734,1338,262,66,47,329,296,121,,,,790,585,4.3600000000,130,2,1,3621,1403,56,312,300,316,70,0.94,Washington Senators,American League Park I,188158,101,104,WSH,WS1,WS1 +1902,NL,BRO,LAD,,2,141,69,75,63,,,N,,564,4845,1242,147,49,19,319,489,145,,,,519,375,2.6900000000,132,14,3,3768,1113,10,363,536,275,79,0.95,Brooklyn Superbas,Washington Park III,199868,101,99,BRO,BRO,BRO +1902,NL,BSN,ATL,,3,142,72,73,64,,,N,,572,4728,1178,142,39,14,398,481,189,,,,516,365,2.6100000000,124,14,4,3777,1233,16,372,523,236,90,0.95,Boston Beaneaters,South End Grounds III,116960,101,102,BSN,BSN,BSN +1902,NL,CHN,CHC,,5,141,70,68,69,,,N,,530,4802,1200,131,40,6,353,565,222,,,,501,313,2.2100000000,132,17,2,3825,1235,9,279,437,311,111,0.94,Chicago Orphans,West Side Park II,263700,97,97,CHC,CHN,CHN +1902,NL,CIN,CIN,,4,141,70,70,70,,,N,,633,4908,1383,188,77,18,297,465,131,,,,566,368,2.6700000000,130,9,1,3717,1228,15,352,430,322,118,0.94,Cincinnati Reds,Palace of the Fans,217300,109,108,CIN,CIN,CIN +1902,NL,NY1,SFG,,8,139,71,48,88,,,N,,401,4571,1088,147,34,8,252,530,187,,,,590,384,2.8200000000,118,11,1,3678,1193,16,332,501,330,104,0.94,New York Giants,Polo Grounds III,302875,99,101,NYG,NY1,NY1 +1902,NL,PHI,PHI,,7,138,69,56,81,,,N,,484,4615,1139,110,43,5,356,481,108,,,,649,471,3.5000000000,118,8,3,3633,1323,12,334,504,305,81,0.94,Philadelphia Phillies,Baker Bowl,112066,104,105,PHI,PHI,PHI +1902,NL,PIT,PIT,,1,142,71,103,36,,,Y,,775,4926,1410,189,95,18,372,446,222,,,,440,323,2.3000000000,131,21,3,3792,1142,4,250,564,247,87,0.95,Pittsburgh Pirates,Exposition Park,243826,104,99,PIT,PIT,PIT +1902,NL,SLN,STL,,6,140,70,56,78,,,N,,517,4751,1226,116,37,10,273,438,158,,,,695,473,3.4700000000,112,7,4,3681,1399,16,338,400,323,107,0.94,St. Louis Cardinals,Robison Field,226417,96,99,STL,SLN,SLN +1903,AL,BOS,BOS,,1,141,70,91,47,,,Y,Y,708,4919,1336,222,113,48,262,561,141,,,,504,358,2.5700000000,123,20,4,3765,1142,23,269,579,235,86,0.95,Boston Americans,Huntington Avenue Grounds,379338,105,102,BOS,BOS,BOS +1903,AL,CHA,CHW,,7,138,70,60,77,,,N,N,516,4670,1152,176,49,14,325,537,180,,,,613,414,3.0200000000,114,9,4,3705,1233,23,287,391,297,85,0.94,Chicago White Sox,South Side Park II,286183,96,95,CHW,CHA,CHA +1903,AL,CLE,CLE,,3,140,74,77,63,,,N,N,639,4773,1265,231,95,31,259,595,175,,,,579,377,2.7300000000,125,20,1,3729,1161,16,271,521,322,99,0.94,Cleveland Naps,League Park I,311280,98,96,CLE,CLE,CLE +1903,AL,DET,DET,,5,137,65,65,71,,,N,N,567,4582,1229,162,91,12,292,526,128,,,,539,365,2.7500000000,123,15,2,3588,1169,19,336,554,281,82,0.95,Detroit Tigers,Bennett Park,224523,96,97,DET,DET,DET +1903,AL,NYA,NYY,,4,136,67,72,62,,,N,N,579,4565,1136,193,62,18,332,465,160,,,,573,411,3.0800000000,111,7,2,3603,1171,19,245,463,264,87,0.95,New York Highlanders,Hilltop Park,211808,106,105,NYY,NYA,NYA +1903,AL,PHA,OAK,,2,137,67,75,60,,,N,N,597,4673,1236,227,68,32,268,513,157,,,,519,400,2.9800000000,112,10,1,3621,1124,20,315,728,217,66,0.96,Philadelphia Athletics,Columbia Park,422473,105,103,PHA,PHA,PHA +1903,AL,SLA,BAL,,6,139,70,65,74,,,N,N,500,4639,1133,166,68,12,271,539,101,,,,525,376,2.7700000000,124,12,3,3666,1220,26,237,511,268,94,0.95,St. Louis Browns,Sportsman's Park III,380405,97,98,SLB,SLA,SLA +1903,AL,WS1,MIN,,8,140,71,43,94,,,N,N,437,4613,1066,172,72,17,257,463,131,,,,691,519,3.8200000000,122,6,3,3669,1333,38,306,452,262,86,0.95,Washington Senators,American League Park I,128878,102,105,WSH,WS1,WS1 +1903,NL,BRO,LAD,,5,139,73,70,66,,,N,N,667,4534,1201,177,56,15,522,,273,,,,682,467,3.4400000000,118,11,4,3663,1276,18,377,438,284,98,0.95,Brooklyn Superbas,Washington Park III,224670,97,98,BRO,BRO,BRO +1903,NL,BSN,ATL,,6,140,68,58,80,,,N,N,578,4682,1145,176,47,25,398,,159,,,,699,456,3.3400000000,125,8,1,3684,1310,30,460,516,351,89,0.93,Boston Beaneaters,South End Grounds III,143155,96,98,BSN,BSN,BSN +1903,NL,CHN,CHC,,3,139,73,82,56,,,N,N,695,4733,1300,191,62,9,422,,259,,,,599,382,2.7700000000,117,6,6,3720,1182,14,354,451,314,78,0.94,Chicago Cubs,West Side Park II,386205,97,96,CHC,CHN,CHN +1903,NL,CIN,CIN,,4,141,76,74,65,,,N,N,765,4857,1399,228,92,28,403,,144,,,,656,420,3.0700000000,126,11,1,3690,1277,14,378,480,312,84,0.94,Cincinnati Reds,Palace of the Fans,351680,111,109,CIN,CIN,CIN +1903,NL,NY1,SFG,,2,142,70,84,55,,,N,N,729,4741,1290,181,49,20,379,,264,,,,567,414,2.9500000000,115,8,8,3786,1257,20,371,628,287,87,0.95,New York Giants,Polo Grounds III,579530,104,102,NYG,NY1,NY1 +1903,NL,PHI,PHI,,7,139,61,49,86,,,N,N,617,4781,1283,186,62,12,338,,120,,,,738,533,3.9600000000,126,5,3,3636,1347,21,425,381,299,76,0.94,Philadelphia Phillies,Baker Bowl,151729,92,95,PHI,PHI,PHI +1903,NL,PIT,PIT,,1,141,70,91,49,,,Y,N,793,4988,1429,208,110,34,364,,172,,,,613,404,2.9100000000,117,16,5,3753,1215,9,384,454,289,100,0.95,Pittsburgh Pirates,Exposition Park,326855,103,99,PIT,PIT,PIT +1903,NL,SLN,STL,,8,139,69,43,94,,,N,N,505,4689,1176,138,65,8,277,,171,,,,795,494,3.6700000000,111,4,2,3636,1353,25,430,419,321,111,0.94,St. Louis Cardinals,Robison Field,226538,97,100,STL,SLN,SLN +1904,AL,BOS,BOS,,1,157,81,95,59,,,Y,,608,5231,1294,194,105,26,347,570,101,,,,466,331,2.1200000000,148,21,1,4218,1208,31,233,612,236,83,0.96,Boston Americans,Huntington Avenue Grounds,623295,106,103,BOS,BOS,BOS +1904,AL,CHA,CHW,,3,156,78,89,65,,,N,,600,5027,1217,193,68,14,373,586,216,,,,482,353,2.3000000000,134,26,3,4140,1161,13,303,550,238,95,0.96,Chicago White Sox,South Side Park II,557123,96,95,CHW,CHA,CHA +1904,AL,CLE,CLE,,4,154,78,86,65,,,N,,647,5152,1340,225,90,27,307,714,178,,,,482,334,2.2200000000,141,20,0,4068,1273,10,285,627,255,86,0.95,Cleveland Naps,League Park I,264749,99,98,CLE,CLE,CLE +1904,AL,DET,DET,,7,162,79,62,90,,,N,,505,5321,1231,154,69,11,344,635,112,,,,627,440,2.7700000000,143,15,2,4290,1345,16,433,556,273,92,0.95,Detroit Tigers,Bennett Park,177796,97,98,DET,DET,DET +1904,AL,NYA,NYY,,2,155,75,92,59,,,N,,598,5220,1354,195,91,27,312,548,163,,,,526,394,2.5700000000,123,15,1,4140,1180,29,311,684,275,90,0.95,New York Highlanders,Hilltop Park,438919,105,104,NYY,NYA,NYA +1904,AL,PHA,OAK,,5,155,79,81,70,,,N,,557,5088,1266,197,77,31,313,605,137,,,,503,355,2.3500000000,136,26,0,4083,1149,13,366,887,250,67,0.95,Philadelphia Athletics,Columbia Park,512294,105,103,PHA,PHA,PHA +1904,AL,SLA,BAL,,6,156,78,65,87,,,N,,481,5291,1266,153,53,10,332,609,150,,,,604,443,2.8300000000,135,13,1,4230,1335,25,333,577,267,78,0.96,St. Louis Browns,Sportsman's Park III,318108,94,96,SLB,SLA,SLA +1904,AL,WS1,MIN,,8,157,78,38,113,,,N,,437,5149,1170,171,57,10,283,759,150,,,,743,547,3.6200000000,137,7,4,4077,1487,19,347,533,313,97,0.95,Washington Senators,American League Park II,131744,98,102,WSH,WS1,WS1 +1904,NL,BRO,LAD,,6,154,76,56,97,,,N,,497,4917,1142,159,53,15,411,,205,,,,614,401,2.7000000000,135,12,2,4011,1281,27,414,453,343,87,0.94,Brooklyn Superbas,Washington Park III,214600,97,100,BRO,BRO,BRO +1904,NL,BSN,ATL,,7,155,79,55,98,,,N,,491,5135,1217,153,50,24,316,,143,,,,749,514,3.4300000000,136,13,0,4044,1405,25,500,544,338,91,0.94,Boston Beaneaters,South End Grounds III,140694,96,101,BSN,BSN,BSN +1904,NL,CHN,CHC,,2,156,78,93,60,,,N,,599,5210,1294,157,62,22,298,,227,,,,517,353,2.3000000000,139,18,6,4149,1150,16,402,618,282,89,0.95,Chicago Cubs,West Side Park II,439100,100,98,CHC,CHN,CHN +1904,NL,CIN,CIN,,3,157,79,88,65,,,N,,695,5231,1332,189,92,21,399,,179,,,,547,362,2.3400000000,142,12,2,4176,1256,13,343,502,301,81,0.95,Cincinnati Reds,Palace of the Fans,391915,109,107,CIN,CIN,CIN +1904,NL,NY1,SFG,,1,158,84,106,47,,,Y,,744,5150,1347,202,65,31,434,,283,,,,476,337,2.1700000000,127,21,15,4188,1151,36,349,707,289,93,0.95,New York Giants,Polo Grounds III,609826,104,100,NYG,NY1,NY1 +1904,NL,PHI,PHI,,8,155,73,52,100,,,N,,571,5103,1268,170,54,23,377,,159,,,,784,504,3.3900000000,131,10,2,4017,1418,22,425,469,401,93,0.93,Philadelphia Phillies,Baker Bowl,140771,99,100,PHI,PHI,PHI +1904,NL,PIT,PIT,,4,156,78,87,66,,,N,,675,5160,1333,164,102,15,391,,178,,,,592,433,2.8900000000,133,15,1,4044,1273,13,379,455,291,93,0.95,Pittsburgh Pirates,Exposition Park,340615,103,100,PIT,PIT,PIT +1904,NL,SLN,STL,,5,155,76,75,79,,,N,,602,5104,1292,175,66,24,343,,199,,,,595,401,2.6400000000,146,7,2,4104,1286,23,319,529,307,83,0.95,St. Louis Cardinals,Robison Field,386750,96,99,STL,SLN,SLN +1905,AL,BOS,BOS,,4,153,77,78,74,,,N,N,579,5049,1179,165,69,29,486,,131,,,,564,428,2.8400000000,124,14,1,4068,1198,33,292,652,290,75,0.95,Boston Americans,Huntington Avenue Grounds,468828,101,102,BOS,BOS,BOS +1905,AL,CHA,CHW,,2,158,82,92,60,,,N,N,612,5114,1213,200,55,11,439,,194,,,,451,316,1.9900000000,131,15,0,4281,1163,11,329,613,217,64,0.96,Chicago White Sox,South Side Park II,687419,96,93,CHW,CHA,CHA +1905,AL,CLE,CLE,,5,155,77,76,78,,,N,N,567,5166,1318,211,72,18,286,,188,,,,587,432,2.8500000000,140,16,0,4089,1251,23,334,555,233,84,0.96,Cleveland Naps,League Park I,316306,101,99,CLE,CLE,CLE +1905,AL,DET,DET,,3,154,76,79,74,,,N,N,512,4971,1209,190,54,13,375,,129,,,,602,424,2.8300000000,124,17,1,4044,1226,11,474,578,264,80,0.95,Detroit Tigers,Bennett Park,193384,101,103,DET,DET,DET +1905,AL,NYA,NYY,,6,152,75,71,78,,,N,N,586,4957,1228,163,61,23,360,,200,,,,622,440,2.9300000000,88,16,4,4059,1235,26,396,642,293,88,0.95,New York Highlanders,Hilltop Park,309100,111,110,NYY,NYA,NYA +1905,AL,PHA,OAK,,1,152,74,92,56,,,Y,N,623,5146,1310,256,51,24,376,,190,,,,492,337,2.1900000000,117,19,0,4149,1137,21,409,895,265,95,0.95,Philadelphia Athletics,Columbia Park,554576,102,100,PHA,PHA,PHA +1905,AL,SLA,BAL,,8,156,79,54,99,,,N,N,511,5204,1205,153,49,16,362,,130,,,,608,421,2.7400000000,134,10,2,4152,1245,19,389,633,284,78,0.95,St. Louis Browns,Sportsman's Park III,339112,95,96,SLB,SLA,SLA +1905,AL,WS1,MIN,,7,154,77,64,87,,,N,N,559,5015,1121,193,68,22,298,,169,,,,623,434,2.8700000000,118,12,1,4086,1250,12,385,539,319,76,0.95,Washington Senators,American League Park II,252027,96,100,WSH,WS1,WS1 +1905,NL,BRO,LAD,,8,155,77,48,104,,,N,N,506,5100,1255,154,60,29,327,,186,,,,807,563,3.7600000000,125,7,3,4041,1416,24,476,556,408,101,0.93,Brooklyn Superbas,Washington Park III,227924,93,96,BRO,BRO,BRO +1905,NL,BSN,ATL,,7,156,76,51,103,,,N,N,468,5190,1217,148,52,17,302,,132,,,,733,541,3.5200000000,139,14,0,4149,1390,36,433,533,311,89,0.95,Boston Beaneaters,South End Grounds III,150003,98,103,BSN,BSN,BSN +1905,NL,CHN,CHC,,3,155,81,92,61,,,N,N,667,5108,1249,157,82,12,448,,267,,,,442,319,2.0400000000,133,23,2,4221,1135,14,385,627,246,99,0.96,Chicago Cubs,West Side Park II,509900,104,99,CHC,CHN,CHN +1905,NL,CIN,CIN,,5,155,79,79,74,,,N,N,735,5205,1401,160,101,27,434,,181,,,,698,457,3.0100000000,119,10,2,4095,1409,22,439,547,310,122,0.95,Cincinnati Reds,Palace of the Fans,313927,111,110,CIN,CIN,CIN +1905,NL,NY1,SFG,,1,155,76,105,48,,,Y,Y,780,5094,1392,191,88,39,517,,291,,,,505,364,2.3900000000,117,18,15,4110,1160,25,364,760,253,93,0.96,New York Giants,Polo Grounds III,552700,102,98,NYG,NY1,NY1 +1905,NL,PHI,PHI,,4,155,76,83,69,,,N,N,708,5243,1362,187,82,16,406,,180,,,,602,436,2.8100000000,119,12,5,4194,1303,21,411,516,275,99,0.95,Philadelphia Phillies,Baker Bowl,317932,96,97,PHI,PHI,PHI +1905,NL,PIT,PIT,,2,155,78,96,57,,,N,N,692,5213,1385,190,91,22,382,,202,,,,570,439,2.8600000000,113,12,6,4146,1270,12,389,512,255,112,0.96,Pittsburgh Pirates,Exposition Park,369124,103,100,PIT,PIT,PIT +1905,NL,SLN,STL,,6,154,77,58,96,,,N,N,535,5066,1254,140,85,20,391,,162,,,,734,537,3.5900000000,135,10,2,4041,1431,28,367,411,274,83,0.95,St. Louis Cardinals,Robison Field,292800,97,99,STL,SLN,SLN +1906,AL,BOS,BOS,,8,155,77,49,105,,,N,N,463,5168,1223,160,75,13,298,,99,,,,706,524,3.4100000000,124,6,6,4146,1360,37,285,549,333,84,0.94,Boston Americans,Huntington Avenue Grounds,410209,100,102,BOS,BOS,BOS +1906,AL,CHA,CHW,,1,154,79,93,58,,,Y,Y,570,4925,1133,152,52,7,453,,214,,,,460,325,2.1300000000,117,32,3,4125,1212,11,255,543,243,80,0.96,Chicago White Sox,South Side Park II,585202,98,95,CHW,CHA,CHA +1906,AL,CLE,CLE,,3,157,79,89,64,,,N,N,663,5426,1516,240,73,12,330,,203,,,,482,328,2.0900000000,133,27,4,4236,1197,16,365,530,217,111,0.96,Cleveland Naps,League Park I,325733,99,97,CLE,CLE,CLE +1906,AL,DET,DET,,6,151,78,71,78,,,N,N,518,4930,1195,154,64,10,333,,206,,,,599,454,3.0600000000,128,7,4,4002,1398,14,389,469,259,86,0.95,Detroit Tigers,Bennett Park,174043,103,103,DET,DET,DET +1906,AL,NYA,NYY,,2,155,76,90,61,,,N,N,644,5095,1354,166,77,17,331,,192,,,,543,419,2.7800000000,99,18,5,4071,1236,21,351,605,272,69,0.95,New York Highlanders,Hilltop Park,434700,110,110,NYY,NYA,NYA +1906,AL,PHA,OAK,,4,149,73,78,67,,,N,N,561,4883,1206,213,49,32,385,,165,,,,543,382,2.6000000000,107,19,4,3966,1135,9,425,749,267,86,0.95,Philadelphia Athletics,Columbia Park,489129,103,101,PHA,PHA,PHA +1906,AL,SLA,BAL,,5,154,76,76,73,,,N,N,558,5030,1244,145,60,20,366,,221,,,,498,336,2.2300000000,133,17,5,4071,1132,14,314,558,289,80,0.95,St. Louis Browns,Sportsman's Park III,389157,96,96,SLB,SLA,SLA +1906,AL,WS1,MIN,,7,151,75,55,95,,,N,N,518,4956,1180,144,65,26,306,,233,,,,664,477,3.2500000000,115,13,1,3966,1331,15,451,558,273,78,0.95,Washington Senators,American League Park II,129903,95,98,WSH,WS1,WS1 +1906,NL,BRO,LAD,,5,153,76,66,86,,,N,N,496,4897,1156,141,68,25,388,,175,,,,625,469,3.1300000000,119,22,11,4044,1255,15,453,476,283,73,0.95,Brooklyn Superbas,Washington Park III,277400,92,96,BRO,BRO,BRO +1906,NL,BSN,ATL,,8,152,76,49,102,,,N,N,408,4925,1115,136,43,16,356,,93,,,,649,465,3.1400000000,137,10,0,4002,1291,24,436,562,337,102,0.94,Boston Beaneaters,South End Grounds III,143280,97,102,BSN,BSN,BSN +1906,NL,CHN,CHC,,1,155,79,116,36,,,Y,N,705,5018,1316,181,71,20,448,,283,,,,381,270,1.7500000000,125,30,10,4164,1018,12,446,702,190,100,0.97,Chicago Cubs,West Side Park II,654300,106,100,CHC,CHN,CHN +1906,NL,CIN,CIN,,6,155,78,64,87,,,N,N,533,5025,1198,140,71,16,395,,170,,,,582,409,2.6900000000,126,12,5,4107,1248,14,470,567,260,97,0.95,Cincinnati Reds,Palace of the Fans,330056,104,104,CIN,CIN,CIN +1906,NL,NY1,SFG,,2,153,75,96,56,,,N,N,625,4768,1217,162,53,15,563,,288,,,,510,369,2.4900000000,105,19,18,4002,1207,13,394,639,228,84,0.96,New York Giants,Polo Grounds III,402850,102,99,NYG,NY1,NY1 +1906,NL,PHI,PHI,,4,154,77,71,82,,,N,N,528,4911,1183,197,47,12,432,,180,,,,564,388,2.5800000000,108,21,5,4062,1201,18,436,500,271,83,0.95,Philadelphia Phillies,Baker Bowl,294680,100,99,PHI,PHI,PHI +1906,NL,PIT,PIT,,3,154,77,93,60,,,N,N,623,5030,1313,164,67,12,424,,162,,,,470,333,2.2100000000,116,27,2,4074,1234,13,309,532,220,109,0.96,Pittsburgh Pirates,Exposition Park,394877,104,102,PIT,PIT,PIT +1906,NL,SLN,STL,,7,154,77,52,98,,,N,N,470,5075,1195,137,69,10,361,,110,,,,607,457,3.0400000000,118,4,2,4062,1246,17,479,559,272,92,0.95,St. Louis Cardinals,Robison Field,283770,96,100,STL,SLN,SLN +1907,AL,BOS,BOS,,7,155,78,59,90,,,N,N,464,5235,1224,154,48,18,305,,125,,,,558,385,2.4500000000,100,17,7,4242,1222,22,337,517,269,103,0.95,Boston Americans,Huntington Avenue Grounds,436777,99,101,BOS,BOS,BOS +1907,AL,CHA,CHW,,3,157,79,87,64,,,N,N,588,5070,1205,149,33,5,421,,175,,,,474,347,2.2200000000,112,17,9,4218,1279,13,305,604,232,101,0.96,Chicago White Sox,South Side Park II,666307,97,95,CHW,CHA,CHA +1907,AL,CLE,CLE,,4,158,82,85,67,,,N,N,530,5068,1221,182,68,11,335,,193,,,,525,350,2.2600000000,127,20,5,4176,1253,8,362,513,264,137,0.96,Cleveland Naps,League Park I,382046,101,99,CLE,CLE,CLE +1907,AL,DET,DET,,1,153,79,92,58,,,Y,N,694,5204,1383,179,75,11,315,,192,,,,532,355,2.3300000000,120,15,7,4110,1281,8,380,512,264,79,0.95,Detroit Tigers,Bennett Park,297079,103,102,DET,DET,DET +1907,AL,NYA,NYY,,5,152,75,70,78,,,N,N,605,5044,1258,150,67,15,304,,206,,,,665,449,3.0300000000,93,10,5,3999,1327,13,428,511,336,79,0.94,New York Highlanders,Hilltop Park,350020,108,110,NYY,NYA,NYA +1907,AL,PHA,OAK,,2,150,73,88,57,,,N,N,582,5008,1274,223,43,22,384,,137,,,,511,354,2.3500000000,106,27,6,4062,1106,13,378,789,263,67,0.95,Philadelphia Athletics,Columbia Park,625581,102,102,PHA,PHA,PHA +1907,AL,SLA,BAL,,6,155,76,69,83,,,N,N,542,5224,1324,154,63,10,370,,144,,,,555,400,2.6100000000,129,15,9,4143,1254,17,352,463,266,97,0.95,St. Louis Browns,Sportsman's Park III,419025,100,99,SLB,SLA,SLA +1907,AL,WS1,MIN,,8,154,75,49,102,,,N,N,506,5112,1243,134,58,12,390,,223,,,,691,467,3.1100000000,106,12,5,4053,1383,10,344,570,309,69,0.95,Washington Senators,American League Park II,221929,92,95,WSH,WS1,WS1 +1907,NL,BRO,LAD,,5,153,77,65,83,,,N,N,446,4895,1135,142,63,18,336,,121,,,,522,359,2.3800000000,125,20,1,4068,1218,16,463,479,262,94,0.95,Brooklyn Superbas,Washington Park III,312500,92,95,BRO,BRO,BRO +1907,NL,BSN,ATL,,7,152,74,58,90,,,N,N,502,5020,1222,142,61,22,413,,118,,,,652,495,3.3300000000,121,9,2,4014,1324,28,458,426,249,128,0.96,Boston Doves,South End Grounds III,203221,100,103,BSN,BSN,BSN +1907,NL,CHN,CHC,,1,155,76,107,45,,,Y,Y,574,4892,1224,162,48,13,435,,235,,,,390,264,1.7300000000,114,32,8,4119,1054,11,402,586,211,110,0.96,Chicago Cubs,West Side Park II,422550,106,101,CHC,CHN,CHN +1907,NL,CIN,CIN,,6,156,81,66,87,,,N,N,526,4966,1226,126,90,15,372,,158,,,,519,362,2.4100000000,118,10,2,4053,1223,16,444,481,227,118,0.96,Cincinnati Reds,Palace of the Fans,317500,104,105,CIN,CIN,CIN +1907,NL,NY1,SFG,,4,155,77,82,71,,,N,N,574,4874,1222,160,48,23,516,,205,,,,510,373,2.4500000000,109,22,13,4113,1219,25,369,655,230,75,0.96,New York Giants,Polo Grounds III,538350,103,100,NYG,NY1,NY1 +1907,NL,PHI,PHI,,3,149,75,83,64,,,N,N,512,4725,1113,162,65,12,424,,154,,,,476,351,2.4300000000,110,21,4,3897,1095,13,422,499,256,104,0.95,Philadelphia Phillies,Baker Bowl,341216,99,98,PHI,PHI,PHI +1907,NL,PIT,PIT,,2,157,77,91,63,,,N,N,634,4957,1261,133,78,19,469,,264,,,,510,348,2.3000000000,111,24,5,4089,1207,12,368,497,253,75,0.95,Pittsburgh Pirates,Exposition Park,319506,102,99,PIT,PIT,PIT +1907,NL,SLN,STL,,8,155,79,52,101,,,N,N,419,5008,1163,121,51,19,312,,125,,,,608,410,2.7000000000,127,19,2,4095,1212,20,500,594,350,105,0.94,St. Louis Cardinals,Robison Field,185377,97,101,STL,SLN,SLN +1908,AL,BOS,BOS,,5,155,77,75,79,,,N,N,564,5048,1239,117,88,14,289,,167,,,,513,350,2.2800000000,102,12,7,4140,1200,18,364,624,296,71,0.95,Boston Red Sox,Huntington Avenue Grounds,473048,103,103,BOS,BOS,BOS +1908,AL,CHA,CHW,,3,156,78,88,64,,,N,N,537,5027,1127,145,41,3,463,,209,,,,470,349,2.2200000000,107,23,10,4242,1170,11,284,623,233,82,0.96,Chicago White Sox,South Side Park II,636096,98,97,CHW,CHA,CHA +1908,AL,CLE,CLE,,2,157,78,90,64,,,N,N,568,5108,1221,188,58,18,364,,177,,,,457,320,2.0200000000,108,18,5,4272,1172,16,328,548,257,95,0.96,Cleveland Naps,League Park I,422262,101,100,CLE,CLE,CLE +1908,AL,DET,DET,,1,154,78,90,63,,,Y,N,647,5115,1347,199,86,19,320,,165,,,,547,366,2.4000000000,119,15,5,4122,1313,12,318,553,298,95,0.95,Detroit Tigers,Bennett Park,436199,104,101,DET,DET,DET +1908,AL,NYA,NYY,,8,155,77,51,103,,,N,N,459,5046,1190,142,50,13,288,,231,,,,713,480,3.1600000000,90,11,3,4098,1288,26,458,585,338,78,0.94,New York Highlanders,Hilltop Park,305500,101,103,NYY,NYA,NYA +1908,AL,PHA,OAK,,6,157,78,68,85,,,N,N,486,5065,1131,183,50,21,368,,116,,,,562,398,2.5600000000,102,23,4,4200,1194,10,410,741,272,68,0.95,Philadelphia Athletics,Columbia Park,455062,107,107,PHA,PHA,PHA +1908,AL,SLA,BAL,,4,155,78,83,69,,,N,N,544,5151,1261,173,52,20,343,,126,,,,483,334,2.1500000000,107,15,5,4191,1151,7,387,607,237,97,0.96,St. Louis Browns,Sportsman's Park III,618947,101,100,SLB,SLA,SLA +1908,AL,WS1,MIN,,7,155,78,67,85,,,N,N,479,5041,1186,132,74,8,368,,170,,,,539,362,2.3400000000,106,15,7,4173,1236,16,348,649,276,89,0.95,Washington Senators,American League Park II,264252,92,96,WSH,WS1,WS1 +1908,NL,BRO,LAD,,7,154,77,53,101,,,N,N,377,4897,1044,110,60,28,323,,113,,,,516,376,2.4700000000,118,20,4,4107,1165,17,444,535,241,66,0.96,Brooklyn Superbas,Washington Park III,275600,96,99,BRO,BRO,BRO +1908,NL,BSN,ATL,,6,156,78,63,91,,,N,N,537,5131,1228,137,43,17,414,,134,,,,622,435,2.7900000000,92,14,1,4212,1262,29,423,416,252,90,0.96,Boston Doves,South End Grounds III,253750,98,102,BSN,BSN,BSN +1908,NL,CHN,CHC,,1,158,78,99,55,,,Y,Y,624,5085,1267,196,56,19,418,,212,,,,461,341,2.1400000000,108,29,12,4299,1137,20,437,668,206,76,0.96,Chicago Cubs,West Side Park II,665325,104,100,CHC,CHN,CHN +1908,NL,CIN,CIN,,5,155,77,73,81,,,N,N,489,4879,1108,129,77,14,372,,196,,,,544,364,2.3700000000,110,17,8,4152,1218,19,415,433,255,72,0.95,Cincinnati Reds,Palace of the Fans,399200,97,98,CIN,CIN,CIN +1908,NL,NY1,SFG,,2,157,80,98,56,,,N,N,652,5006,1339,182,43,20,494,,181,,,,456,336,2.1400000000,95,25,18,4233,1214,26,288,656,248,79,0.96,New York Giants,Polo Grounds III,910000,105,102,NYG,NY1,NY1 +1908,NL,PHI,PHI,,4,155,78,83,71,,,N,N,504,5012,1223,194,68,11,334,,200,,,,445,325,2.1000000000,116,22,6,4179,1167,8,379,476,238,75,0.96,Philadelphia Phillies,Baker Bowl,420660,103,102,PHI,PHI,PHI +1908,NL,PIT,PIT,,2,155,77,98,56,,,N,N,585,5109,1263,162,98,25,420,,186,,,,469,330,2.1200000000,100,24,9,4206,1142,16,406,468,225,74,0.96,Pittsburgh Pirates,Exposition Park,382444,100,98,PIT,PIT,PIT +1908,NL,SLN,STL,,8,154,77,49,105,,,N,N,371,4959,1105,134,57,17,282,,150,,,,626,401,2.6400000000,97,13,4,4104,1217,16,430,528,349,68,0.94,St. Louis Cardinals,Robison Field,205129,95,100,STL,SLN,SLN +1909,AL,BOS,BOS,,3,152,75,88,63,,,N,N,597,4979,1307,151,69,20,348,,215,,,,550,391,2.5900000000,75,11,15,4080,1214,18,384,555,291,95,0.95,Boston Red Sox,Huntington Avenue Grounds,668965,102,101,BOS,BOS,BOS +1909,AL,CHA,CHW,,4,159,81,78,74,,,N,N,492,5017,1110,145,56,4,441,,211,,,,463,326,2.0500000000,115,26,4,4290,1182,8,340,669,247,101,0.96,Chicago White Sox,South Side Park II,478400,96,95,CHW,CHA,CHA +1909,AL,CLE,CLE,,6,155,77,71,82,,,N,N,493,5048,1216,173,81,10,283,,174,,,,532,363,2.4000000000,110,15,3,4083,1212,9,348,568,277,110,0.95,Cleveland Naps,League Park I,354627,104,103,CLE,CLE,CLE +1909,AL,DET,DET,,1,158,78,98,54,,,Y,N,666,5095,1360,209,58,19,397,,280,,,,493,357,2.2600000000,117,17,12,4260,1254,16,359,528,268,87,0.96,Detroit Tigers,Bennett Park,490490,104,102,DET,DET,DET +1909,AL,NYA,NYY,,5,153,77,74,77,,,N,N,590,4981,1234,143,61,16,407,,187,,,,587,398,2.6500000000,94,18,7,4050,1223,21,422,597,328,94,0.94,New York Highlanders,Hilltop Park,501000,101,102,NYY,NYA,NYA +1909,AL,PHA,OAK,,2,153,76,95,58,,,N,N,605,4905,1257,186,88,21,403,,205,,,,408,296,1.9300000000,110,27,3,4134,1069,9,386,728,245,92,0.96,Philadelphia Athletics,Shibe Park,674915,102,97,PHA,PHA,PHA +1909,AL,SLA,BAL,,7,154,79,61,89,,,N,N,441,4964,1151,116,45,10,331,,136,,,,575,433,2.8800000000,105,21,4,4062,1287,16,383,620,267,107,0.95,St. Louis Browns,Sportsman's Park IV,366274,93,98,SLB,SLA,SLA +1909,AL,WS1,MIN,,8,156,77,42,110,,,N,N,380,4983,1112,149,41,9,321,,136,,,,656,464,3.0400000000,99,11,2,4122,1288,12,424,653,280,100,0.95,Washington Senators,American League Park II,205199,95,98,WSH,WS1,WS1 +1909,NL,BRO,LAD,,6,155,79,55,98,,,N,N,444,5056,1157,176,59,16,330,,141,,,,627,477,3.1000000000,126,18,3,4152,1277,32,528,594,276,86,0.95,Brooklyn Superbas,Washington Park III,321300,96,100,BRO,BRO,BRO +1909,NL,BSN,ATL,,8,155,76,45,108,,,N,N,435,5017,1121,124,43,15,400,,135,,,,683,487,3.2000000000,98,13,6,4110,1329,23,543,414,340,101,0.94,Boston Doves,South End Grounds III,195188,104,108,BSN,BSN,BSN +1909,NL,CHN,CHC,,2,155,77,104,49,,,N,N,635,4999,1227,203,60,20,420,,187,,,,390,272,1.7500000000,111,32,11,4197,1094,6,364,680,244,95,0.96,Chicago Cubs,West Side Park II,633480,103,98,CHC,CHN,CHN +1909,NL,CIN,CIN,,4,157,80,77,76,,,N,N,606,5088,1273,159,72,22,478,,280,,,,599,394,2.5200000000,91,10,8,4221,1233,5,510,477,309,120,0.95,Cincinnati Reds,Palace of the Fans,424643,99,100,CIN,CIN,CIN +1909,NL,NY1,SFG,,3,158,77,92,61,,,N,N,623,5218,1327,173,68,26,530,,234,,,,546,363,2.2700000000,105,17,15,4320,1248,28,397,735,305,99,0.95,New York Giants,Polo Grounds III,783700,102,98,NYG,NY1,NY1 +1909,NL,PHI,PHI,,5,154,77,74,79,,,N,N,516,5034,1228,185,53,12,369,,185,,,,518,377,2.4400000000,89,17,6,4173,1190,23,472,612,241,97,0.96,Philadelphia Phillies,Baker Bowl,303177,101,100,PHI,PHI,PHI +1909,NL,PIT,PIT,,1,154,78,110,42,,,Y,Y,699,5129,1332,218,92,25,479,,185,,,,447,322,2.0700000000,93,21,11,4203,1174,12,320,490,222,100,0.96,Pittsburgh Pirates,Exposition Park/Forbes Field,534950,105,99,PIT,PIT,PIT +1909,NL,SLN,STL,,7,154,76,54,98,,,N,N,583,5108,1242,148,56,15,568,,161,,,,731,522,3.4100000000,84,5,4,4137,1368,22,483,435,321,90,0.95,St. Louis Cardinals,Robison Field,299982,94,97,STL,SLN,SLN +1910,AL,BOS,BOS,,4,158,80,81,72,,,N,N,638,5204,1350,175,87,43,430,,194,,,,564,389,2.4500000000,100,12,6,4290,1236,30,414,670,308,80,0.95,Boston Red Sox,Huntington Avenue Grounds,584619,102,101,BOS,BOS,BOS +1910,AL,CHA,CHW,,6,156,79,68,85,,,N,N,457,5024,1058,115,58,7,403,,183,,,,479,321,2.0300000000,103,23,7,4263,1130,16,381,785,314,100,0.95,Chicago White Sox,South Side Park II/Comiskey Park,552084,95,95,CHW,CHA,CHA +1910,AL,CLE,CLE,,5,161,80,71,81,,,N,N,548,5385,1316,188,64,9,366,,189,,,,657,469,2.8800000000,92,13,5,4401,1392,10,488,617,246,112,0.96,Cleveland Naps,League Park II,293456,101,103,CLE,CLE,CLE +1910,AL,DET,DET,,3,155,78,86,68,,,N,N,679,5039,1317,190,72,28,459,,249,,,,582,432,2.8200000000,108,17,5,4140,1257,34,460,532,281,79,0.95,Detroit Tigers,Bennett Park,391288,107,104,DET,DET,DET +1910,AL,NYA,NYY,,2,156,77,88,63,,,N,N,626,5051,1254,164,75,20,464,,288,,,,557,406,2.6100000000,110,14,8,4197,1238,16,364,654,286,95,0.95,New York Highlanders,Hilltop Park,355857,106,105,NYY,NYA,NYA +1910,AL,PHA,OAK,,1,155,78,102,48,,,Y,Y,673,5156,1373,191,105,19,409,,207,,,,441,283,1.7900000000,123,24,5,4263,1103,8,450,789,230,117,0.96,Philadelphia Athletics,Shibe Park,588905,99,94,PHA,PHA,PHA +1910,AL,SLA,BAL,,8,158,79,47,107,,,N,N,451,5077,1105,131,60,12,415,,169,,,,743,478,3.0900000000,101,9,3,4173,1356,14,532,557,385,113,0.94,St. Louis Browns,Sportsman's Park IV,249889,94,98,SLB,SLA,SLA +1910,AL,WS1,MIN,,7,157,77,66,85,,,N,N,501,4989,1175,145,46,9,449,,192,,,,550,375,2.4600000000,119,19,3,4119,1215,19,375,674,264,99,0.95,Washington Senators,American League Park II,254591,95,99,WSH,WS1,WS1 +1910,NL,BRO,LAD,,6,156,80,64,90,,,N,N,497,5125,1174,166,73,25,434,706,151,,,,623,484,3.0700000000,103,15,5,4260,1331,17,545,555,234,125,0.96,Brooklyn Superbas,Washington Park III,279321,97,100,BRO,BRO,BRO +1910,NL,BSN,ATL,,8,157,78,53,100,,,N,N,495,5123,1260,173,49,31,359,540,152,,,,701,497,3.2200000000,72,12,9,4170,1328,36,599,531,305,137,0.95,Boston Doves,South End Grounds III,149027,103,109,BSN,BSN,BSN +1910,NL,CHN,CHC,,1,154,77,104,50,,,Y,N,712,4977,1333,219,84,34,542,501,173,,,,499,384,2.5100000000,100,25,13,4134,1171,18,474,609,229,110,0.96,Chicago Cubs,West Side Park II,526152,99,95,CHC,CHN,CHN +1910,NL,CIN,CIN,,5,156,77,75,79,,,N,N,620,5121,1326,150,79,23,529,515,310,,,,684,474,3.0800000000,86,16,11,4158,1334,27,528,497,291,103,0.95,Cincinnati Reds,Palace of the Fans,380622,96,97,CIN,CIN,CIN +1910,NL,NY1,SFG,,2,155,79,91,63,,,N,N,715,5061,1391,204,83,31,562,489,282,,,,567,414,2.6800000000,96,9,10,4173,1290,30,397,717,282,117,0.95,New York Giants,Polo Grounds III,511785,100,98,NYG,NY1,NY1 +1910,NL,PHI,PHI,,4,157,78,78,75,,,N,N,674,5171,1319,223,71,22,506,559,199,,,,639,478,3.0500000000,84,17,9,4233,1297,36,547,657,258,132,0.96,Philadelphia Phillies,Baker Bowl,296597,103,103,PHI,PHI,PHI +1910,NL,PIT,PIT,,3,154,76,86,67,,,N,N,655,5125,1364,214,83,33,437,524,148,,,,576,433,2.8300000000,73,13,12,4128,1254,20,392,479,245,102,0.96,Pittsburgh Pirates,Forbes Field,436586,107,104,PIT,PIT,PIT +1910,NL,SLN,STL,,7,153,76,63,90,,,N,N,639,4912,1217,167,70,15,655,581,179,,,,718,562,3.7800000000,81,4,14,4011,1396,30,541,466,257,109,0.95,St. Louis Cardinals,Robison Field,355668,96,98,STL,SLN,SLN +1911,AL,BOS,BOS,,4,153,76,78,75,,,N,N,680,5014,1379,203,66,35,506,,190,,,,643,411,2.7400000000,87,10,8,4053,1309,21,473,711,322,93,0.94,Boston Red Sox,Huntington Avenue Grounds,503961,99,98,BOS,BOS,BOS +1911,AL,CHA,CHW,,5,154,78,77,74,,,N,N,719,5213,1401,179,92,20,385,,201,,,,624,457,2.9700000000,85,17,11,4158,1349,22,384,752,255,98,0.96,Chicago White Sox,Comiskey Park,583208,98,97,CHW,CHA,CHA +1911,AL,CLE,CLE,,3,156,77,80,73,,,N,N,691,5321,1501,238,81,20,354,,209,,,,712,519,3.3600000000,93,6,6,4170,1382,17,552,675,302,108,0.95,Cleveland Naps,League Park II,406296,101,102,CLE,CLE,CLE +1911,AL,DET,DET,,2,154,76,89,65,,,N,N,831,5294,1544,230,96,30,471,,276,,,,776,575,3.7300000000,108,8,3,4161,1514,28,460,538,312,78,0.95,Detroit Tigers,Bennett Park,484988,105,104,DET,DET,DET +1911,AL,NYA,NYY,,6,153,77,76,76,,,N,N,684,5052,1374,190,96,25,493,,269,,,,724,535,3.5400000000,91,5,3,4080,1404,26,406,667,320,99,0.94,New York Highlanders,Hilltop Park,302444,106,107,NYY,NYA,NYA +1911,AL,PHA,OAK,,1,152,75,101,50,,,Y,Y,861,5199,1540,237,93,35,424,,226,,,,601,460,3.0100000000,97,13,13,4125,1343,17,487,739,228,100,0.96,Philadelphia Athletics,Shibe Park,605749,98,95,PHA,PHA,PHA +1911,AL,SLA,BAL,,8,152,78,45,107,,,N,N,567,4996,1192,187,63,17,460,,125,,,,812,571,3.8600000000,92,8,1,3996,1465,28,463,383,358,104,0.94,St. Louis Browns,Sportsman's Park IV,207984,96,101,SLB,SLA,SLA +1911,AL,WS1,MIN,,7,154,77,64,90,,,N,N,625,5065,1308,159,54,16,466,,215,,,,766,529,3.5200000000,106,13,3,4059,1471,39,410,628,306,90,0.95,Washington Senators,Griffith Stadium I,244884,98,98,WSH,WS1,WS1 +1911,NL,BRO,LAD,,7,154,74,64,86,,,N,N,539,5059,1198,151,71,28,425,683,184,,,,659,516,3.3900000000,81,13,10,4113,1310,27,566,533,243,112,0.96,Brooklyn Dodgers,Washington Park III,269000,96,98,BRO,BRO,BRO +1911,NL,BSN,ATL,,8,156,75,44,107,,,N,N,699,5308,1417,249,54,37,554,577,169,,,,1021,776,5.0800000000,73,5,7,4122,1570,76,672,486,347,110,0.94,Boston Rustlers,South End Grounds III,116000,107,111,BSN,BSN,BSN +1911,NL,CHN,CHC,,2,157,84,92,62,,,N,N,757,5130,1335,218,101,54,585,617,214,,,,607,455,2.9000000000,85,12,16,4233,1270,26,525,582,260,114,0.96,Chicago Cubs,West Side Park II,576000,100,97,CHC,CHN,CHN +1911,NL,CIN,CIN,,6,159,82,70,83,,,N,N,682,5291,1379,180,105,21,578,594,289,,,,706,516,3.2600000000,77,4,12,4275,1410,36,476,557,297,108,0.95,Cincinnati Reds,Palace of the Fans,300000,97,98,CIN,CIN,CIN +1911,NL,NY1,SFG,,1,154,75,99,54,,,Y,N,756,5006,1399,225,103,41,530,506,347,,,,542,409,2.6900000000,95,19,13,4104,1267,33,369,771,251,86,0.96,New York Giants,Polo Grounds III/Polo Grounds IV,675000,103,99,NYG,NY1,NY1 +1911,NL,PHI,PHI,,4,153,76,79,73,,,N,N,658,5044,1307,214,56,60,490,588,153,,,,669,503,3.3000000000,90,20,10,4119,1285,43,598,697,231,113,0.96,Philadelphia Phillies,Baker Bowl,416000,101,101,PHI,PHI,PHI +1911,NL,PIT,PIT,,3,155,78,85,69,,,N,N,744,5137,1345,206,106,49,525,583,160,,,,557,435,2.8400000000,91,13,11,4140,1249,36,375,605,231,131,0.96,Pittsburgh Pirates,Forbes Field,432000,104,101,PIT,PIT,PIT +1911,NL,SLN,STL,,5,158,79,75,74,,,N,N,671,5132,1295,199,86,26,592,650,175,,,,745,573,3.6800000000,88,6,10,4206,1296,39,701,561,262,106,0.95,St. Louis Cardinals,Robison Field,447768,97,99,STL,SLN,SLN +1912,AL,BOS,BOS,,1,154,78,105,47,,,Y,Y,799,5071,1404,269,84,29,565,,185,,,,544,418,2.7600000000,108,18,6,4086,1243,18,385,712,266,88,0.95,Boston Red Sox,Fenway Park I,597096,105,102,BOS,BOS,BOS +1912,AL,CHA,CHW,,4,158,78,78,76,,,N,N,639,5182,1321,174,80,17,423,,205,,,,648,480,3.0600000000,85,14,16,4239,1398,26,426,698,289,102,0.95,Chicago White Sox,Comiskey Park,602241,97,97,CHW,CHA,CHA +1912,AL,CLE,CLE,,5,155,77,75,78,,,N,N,677,5133,1403,219,77,12,407,,194,,,,681,496,3.3000000000,94,7,7,4056,1367,15,523,622,286,124,0.95,Cleveland Naps,League Park II,336844,103,103,CLE,CLE,CLE +1912,AL,DET,DET,,6,154,76,69,84,,,N,N,720,5143,1376,189,86,19,530,,270,,,,777,573,3.7700000000,107,7,5,4101,1438,16,521,512,330,91,0.95,Detroit Tigers,Navin Field,402870,97,98,DET,DET,DET +1912,AL,NYA,NYY,,8,153,76,50,102,,,N,N,630,5092,1320,168,79,18,463,,247,,,,842,613,4.1300000000,105,5,3,4005,1448,28,436,637,376,77,0.94,New York Highlanders,Hilltop Park,242194,106,108,NYY,NYA,NYA +1912,AL,PHA,OAK,,3,153,77,90,62,,,N,N,779,5111,1442,204,108,22,485,,258,,,,658,501,3.3200000000,95,11,9,4071,1273,12,518,601,263,115,0.95,Philadelphia Athletics,Shibe Park,517653,97,93,PHA,PHA,PHA +1912,AL,SLA,BAL,,7,157,79,53,101,,,N,N,552,5080,1262,166,71,19,449,,176,,,,764,564,3.7100000000,85,8,5,4107,1433,17,442,547,340,127,0.94,St. Louis Browns,Sportsman's Park IV,214070,96,100,SLB,SLA,SLA +1912,AL,WS1,MIN,,2,154,78,91,61,,,N,N,699,5075,1298,202,86,20,472,,274,,,,581,411,2.6900000000,98,11,7,4128,1219,24,525,828,297,92,0.95,Washington Senators,Griffith Stadium I,350663,101,101,WSH,WS1,WS1 +1912,NL,BRO,LAD,,7,153,76,58,95,,,N,N,651,5141,1377,220,73,32,490,584,179,,,,754,549,3.6400000000,71,10,8,4071,1399,45,510,553,255,96,0.95,Brooklyn Dodgers,Washington Park III,243000,96,98,BRO,BRO,BRO +1912,NL,BSN,ATL,,8,155,79,52,101,,,N,N,693,5361,1465,227,68,35,454,690,137,,,,861,644,4.1700000000,88,5,5,4170,1544,43,521,542,295,129,0.95,Boston Braves,South End Grounds III,121000,100,104,BSN,BSN,BSN +1912,NL,CHN,CHC,,3,152,78,91,59,,,N,N,756,5048,1398,245,90,43,560,615,164,,,,668,516,3.4200000000,80,15,9,4074,1307,33,493,554,249,125,0.96,Chicago Cubs,West Side Park II,514000,100,97,CHC,CHN,CHN +1912,NL,CIN,CIN,,4,155,77,75,78,,,N,N,656,5115,1310,183,89,21,479,492,248,,,,722,523,3.4200000000,86,13,10,4131,1455,28,452,561,247,102,0.96,Cincinnati Reds,Crosley Field,344000,97,99,CIN,CIN,CIN +1912,NL,NY1,SFG,,1,154,76,103,48,,,Y,N,823,5067,1451,231,89,47,514,497,319,,,,571,392,2.5800000000,93,8,15,4107,1352,36,338,652,280,123,0.95,New York Giants,Polo Grounds IV,638000,104,100,NYG,NY1,NY1 +1912,NL,PHI,PHI,,5,152,75,73,79,,,N,N,670,5077,1354,244,68,43,464,615,159,,,,688,489,3.2500000000,81,10,9,4065,1381,43,515,616,231,98,0.96,Philadelphia Phillies,Baker Bowl,250000,106,106,PHI,PHI,PHI +1912,NL,PIT,PIT,,2,152,75,93,58,,,N,N,751,5252,1493,222,129,39,420,514,177,,,,565,439,2.8500000000,94,18,7,4155,1268,28,497,664,169,125,0.97,Pittsburgh Pirates,Forbes Field,384000,99,96,PIT,PIT,PIT +1912,NL,SLN,STL,,6,153,77,63,90,,,N,N,659,5092,1366,190,77,27,508,620,193,,,,830,579,3.8500000000,61,6,12,4059,1466,31,560,487,272,113,0.95,St. Louis Cardinals,Robison Field,241759,98,101,STL,SLN,SLN +1913,AL,BOS,BOS,,4,151,75,79,71,,,N,N,631,4965,1334,220,101,17,466,534,189,,,,610,444,2.9400000000,83,12,10,4074,1323,6,442,710,238,84,0.96,Boston Red Sox,Fenway Park I,437194,103,100,BOS,BOS,BOS +1913,AL,CHA,CHW,,5,153,77,78,74,,,N,N,488,4822,1139,157,66,24,398,550,156,,,,498,352,2.3300000000,84,17,8,4080,1190,10,438,602,255,104,0.96,Chicago White Sox,Comiskey Park,644501,99,100,CHW,CHA,CHA +1913,AL,CLE,CLE,,3,155,80,86,66,,,N,N,633,5031,1349,206,74,16,420,557,191,,,,536,391,2.5400000000,93,18,5,4158,1278,19,502,689,242,124,0.96,Cleveland Naps,League Park II,541000,103,103,CLE,CLE,CLE +1913,AL,DET,DET,,6,153,76,66,87,,,N,N,624,5064,1344,180,101,24,496,501,218,,,,716,511,3.3800000000,90,4,7,4080,1359,13,504,468,297,105,0.95,Detroit Tigers,Navin Field,398502,99,99,DET,DET,DET +1913,AL,NYA,NYY,,7,153,75,57,94,,,N,N,529,4880,1157,155,45,8,534,617,203,,,,668,488,3.2700000000,75,8,7,4032,1318,31,455,530,286,94,0.95,New York Yankees,Polo Grounds IV,357551,100,102,NYY,NYA,NYA +1913,AL,PHA,OAK,,1,153,76,96,57,,,Y,Y,794,5044,1412,223,80,33,534,547,221,,,,592,479,3.1900000000,69,17,22,4053,1200,24,532,630,212,108,0.96,Philadelphia Athletics,Shibe Park,571896,98,94,PHA,PHA,PHA +1913,AL,SLA,BAL,,8,155,77,57,96,,,N,N,528,5031,1193,179,73,18,455,769,209,,,,642,470,3.0600000000,104,14,5,4146,1369,21,454,476,301,125,0.95,St. Louis Browns,Sportsman's Park IV,250330,97,100,SLB,SLA,SLA +1913,AL,WS1,MIN,,2,155,78,90,64,,,N,N,596,5074,1281,156,81,19,440,595,287,,,,561,423,2.7300000000,78,23,20,4188,1177,35,465,758,262,122,0.96,Washington Senators,Griffith Stadium I,325831,102,101,WSH,WS1,WS1 +1913,NL,BRO,LAD,,6,152,77,65,84,,,N,N,595,5165,1394,193,86,39,361,555,188,,,,613,477,3.1300000000,71,9,7,4119,1287,33,439,548,243,125,0.96,Brooklyn Superbas,Ebbets Field,347000,103,103,BRO,BRO,BRO +1913,NL,BSN,ATL,,5,154,77,69,82,,,N,N,641,5145,1318,191,60,32,488,640,177,,,,690,487,3.1900000000,105,13,3,4119,1343,37,419,597,273,82,0.95,Boston Braves,South End Grounds III,208000,100,102,BSN,BSN,BSN +1913,NL,CHN,CHC,,3,155,76,88,65,,,N,N,720,5022,1289,195,96,59,554,634,181,,,,630,477,3.1300000000,89,12,15,4116,1330,39,478,556,260,106,0.95,Chicago Cubs,West Side Park II,419000,100,99,CHC,CHN,CHN +1913,NL,CIN,CIN,,7,156,78,64,89,,,N,N,607,5132,1339,170,96,27,458,579,226,,,,717,531,3.4600000000,71,10,10,4140,1398,40,456,522,251,104,0.96,Cincinnati Reds,Crosley Field,258000,100,101,CIN,CIN,CIN +1913,NL,NY1,SFG,,1,156,81,101,51,,,Y,N,684,5218,1427,226,71,30,444,501,296,,,,515,382,2.4200000000,82,12,17,4266,1276,38,315,651,252,107,0.96,New York Giants,Polo Grounds IV,630000,101,98,NYG,NY1,NY1 +1913,NL,PHI,PHI,,2,159,78,88,63,,,N,N,693,5400,1433,257,78,73,383,578,156,,,,636,509,3.1500000000,77,20,11,4365,1407,40,512,667,213,112,0.96,Philadelphia Phillies,Baker Bowl,470000,104,104,PHI,PHI,PHI +1913,NL,PIT,PIT,,4,155,79,78,71,,,N,N,673,5252,1383,210,86,35,391,545,181,,,,585,451,2.9000000000,74,9,7,4200,1344,26,434,590,226,94,0.96,Pittsburgh Pirates,Forbes Field,296000,96,94,PIT,PIT,PIT +1913,NL,SLN,STL,,8,153,74,51,99,,,N,N,528,4967,1229,152,72,15,451,573,171,,,,755,635,4.2300000000,74,6,11,4053,1426,57,477,465,219,113,0.96,St. Louis Cardinals,Robison Field,203531,98,101,STL,SLN,SLN +1914,AL,BOS,BOS,,2,159,79,91,62,,,N,N,589,5117,1278,226,85,18,490,549,177,176,,,510,374,2.3600000000,88,24,8,4281,1207,18,393,602,242,99,0.96,Boston Red Sox,Fenway Park I,481359,100,98,BOS,BOS,BOS +1914,AL,CHA,CHW,,6,157,81,70,84,,,N,N,487,5040,1205,161,71,19,408,609,167,152,,,560,385,2.4800000000,74,17,11,4194,1207,15,401,660,288,90,0.95,Chicago White Sox,Comiskey Park,469290,99,98,CHW,CHA,CHA +1914,AL,CLE,CLE,,8,157,79,51,102,,,N,N,538,5157,1262,178,70,10,450,685,167,157,,,709,496,3.2100000000,69,9,3,4173,1365,10,666,688,298,119,0.95,Cleveland Naps,League Park II,185997,104,105,CLE,CLE,CLE +1914,AL,DET,DET,,4,157,78,80,73,,,N,N,615,5102,1318,195,84,25,557,537,211,154,,,618,449,2.8600000000,81,14,12,4236,1285,17,498,567,285,101,0.95,Detroit Tigers,Navin Field,416225,103,102,DET,DET,DET +1914,AL,NYA,NYY,,6,157,78,70,84,,,N,N,537,4992,1144,149,52,12,577,711,251,191,,,550,436,2.8100000000,98,9,5,4191,1277,30,390,563,223,93,0.96,New York Yankees,Polo Grounds IV,359477,100,101,NYY,NYA,NYA +1914,AL,PHA,OAK,,1,158,78,99,53,,,Y,N,749,5126,1392,165,80,29,545,517,231,188,,,529,434,2.7800000000,89,24,17,4212,1264,18,521,720,213,116,0.96,Philadelphia Athletics,Shibe Park,346641,96,95,PHA,PHA,PHA +1914,AL,SLA,BAL,,5,159,81,71,82,,,N,N,523,5101,1241,185,75,17,423,863,233,189,,,615,446,2.8500000000,81,15,11,4230,1309,20,540,553,317,114,0.95,St. Louis Browns,Sportsman's Park IV,244714,96,99,SLB,SLA,SLA +1914,AL,WS1,MIN,,3,158,77,81,73,,,N,N,572,5108,1245,176,81,18,470,640,220,163,,,519,401,2.5400000000,75,25,20,4260,1170,20,520,784,252,116,0.96,Washington Senators,Griffith Stadium I,243888,104,103,WSH,WS1,WS1 +1914,FL,BLF,BLT,,3,160,,84,70,,,N,,645,5120,1374,222,67,32,487,589,152,,,,628,484,3.1300000000,88,15,13,4176,1389,34,392,732,259,105,0.96,Baltimore Terrapins,,,103,105,BAL,BLF,BLF +1914,FL,BRF,BTT,,5,157,,77,77,,,N,,662,5221,1402,225,85,42,404,665,220,,,,677,512,3.3300000000,91,11,9,4155,1375,31,559,636,282,120,0.95,Brooklyn Tip-Tops,,,99,100,BTT,BRF,BRF +1914,FL,BUF,BFL,,4,155,,80,71,,,N,,620,5064,1264,177,74,38,430,761,228,,,,602,487,3.1600000000,89,15,16,4161,1249,45,505,662,242,109,0.96,Buffalo Buffeds,,,102,103,BUF,BUF,BUF +1914,FL,CHF,CHH,,2,157,,87,67,,,N,,621,5098,1314,227,50,52,520,645,171,,,,517,385,2.4400000000,93,17,8,4260,1204,43,393,650,249,113,0.96,Chicago Chi-Feds,Wrigley Field,,94,92,CHI,CHF,CHF +1914,FL,IND,NEW,,1,157,,88,65,,,Y,,762,5176,1474,230,90,33,470,641,273,,,,622,475,3.0600000000,104,15,9,4191,1352,29,476,664,275,113,0.95,Indianapolis Hoosiers,,,111,108,IND,IND,IND +1914,FL,KCF,KCP,,6,154,,67,84,,,N,,644,5127,1369,226,77,39,399,621,171,,,,683,516,3.4100000000,82,10,12,4083,1387,37,445,600,279,135,0.95,Kansas City Packers,,,97,97,KCP,KCF,KCF +1914,FL,PTF,PBS,,7,154,,64,86,,,N,,605,5114,1339,180,90,34,410,575,153,,,,698,542,3.5600000000,97,9,6,4110,1416,39,444,510,253,92,0.96,Pittsburgh Rebels,,,99,99,PBS,PTF,PTF +1914,FL,SLF,SLI,,8,154,,62,89,,,N,,565,5078,1254,193,65,26,503,662,113,,,,697,545,3.5900000000,97,9,6,4101,1418,38,409,661,269,94,0.95,St. Louis Terriers,,,105,105,SLM,SLF,SLF +1914,NL,BRO,LAD,,5,154,79,75,79,,,N,N,622,5152,1386,172,90,31,376,559,173,,,,618,429,2.8200000000,80,11,11,4104,1282,36,466,605,248,112,0.96,Brooklyn Robins,Ebbets Field,122671,102,102,BRO,BRO,BRO +1914,NL,BSN,ATL,,1,158,79,94,59,,,Y,Y,657,5206,1307,213,60,35,502,617,139,,,,548,433,2.7400000000,104,19,6,4263,1272,38,477,606,237,143,0.96,Boston Braves,South End Grounds III,382913,104,102,BSN,BSN,BSN +1914,NL,CHN,CHC,,4,156,76,78,76,,,N,N,605,5050,1229,199,74,42,501,577,164,,,,638,418,2.7100000000,70,14,11,4167,1169,37,528,651,310,87,0.95,Chicago Cubs,West Side Park II,202516,100,100,CHC,CHN,CHN +1914,NL,CIN,CIN,,8,157,77,60,94,,,N,N,530,4991,1178,142,64,16,441,627,224,,,,651,453,2.9400000000,74,15,15,4161,1259,30,489,607,314,113,0.95,Cincinnati Reds,Crosley Field,100791,103,105,CIN,CIN,CIN +1914,NL,NY1,SFG,,2,156,80,84,70,,,N,N,672,5146,1363,222,59,30,447,479,239,,,,576,454,2.9400000000,88,20,9,4170,1298,47,367,563,253,119,0.96,New York Giants,Polo Grounds IV,364313,97,95,NYG,NY1,NY1 +1914,NL,PHI,PHI,,6,154,78,74,80,,,N,N,651,5110,1345,211,52,62,472,570,145,,,,687,469,3.0600000000,85,14,7,4137,1403,26,452,650,324,81,0.95,Philadelphia Phillies,Baker Bowl,138474,106,105,PHI,PHI,PHI +1914,NL,PIT,PIT,,7,158,77,69,85,,,N,N,503,5145,1197,148,79,18,416,608,147,,,,540,422,2.7000000000,86,10,11,4215,1272,27,392,488,223,96,0.96,Pittsburgh Pirates,Forbes Field,139620,96,95,PIT,PIT,PIT +1914,NL,SLN,STL,,3,157,79,81,72,,,N,N,558,5046,1249,203,65,33,445,618,204,,,,540,377,2.3800000000,84,16,12,4272,1279,26,422,531,239,109,0.96,St. Louis Cardinals,Robison Field,256099,99,100,STL,SLN,SLN +1915,AL,BOS,BOS,,1,155,76,101,50,,,Y,Y,669,5024,1308,202,76,14,527,476,118,117,,,499,371,2.3900000000,81,19,15,4191,1164,18,446,634,226,95,0.96,Boston Red Sox,Fenway Park I,539885,97,95,BOS,BOS,BOS +1915,AL,CHA,CHW,,3,155,79,93,61,,,N,N,717,4914,1269,163,102,25,583,575,233,183,,,509,378,2.4300000000,91,16,9,4203,1242,14,350,635,222,95,0.96,Chicago White Sox,Comiskey Park,539461,103,102,CHW,CHA,CHA +1915,AL,CLE,CLE,,7,154,77,57,95,,,N,N,539,5034,1210,169,79,20,490,681,138,117,,,670,477,3.1300000000,62,11,10,4116,1287,18,518,610,272,82,0.95,Cleveland Indians,League Park II,159285,102,104,CLE,CLE,CLE +1915,AL,DET,DET,,2,156,77,100,54,,,N,N,778,5128,1372,207,94,23,681,527,241,146,,,597,449,2.8600000000,86,10,19,4239,1259,14,492,550,258,107,0.96,Detroit Tigers,Navin Field,476105,105,103,DET,DET,DET +1915,AL,NYA,NYY,,5,154,82,69,83,,,N,N,584,4982,1162,167,50,31,570,669,198,133,,,588,470,3.0600000000,101,12,2,4146,1272,41,517,559,215,118,0.96,New York Yankees,Polo Grounds IV,256035,100,100,NYY,NYA,NYA +1915,AL,PHA,OAK,,8,154,74,43,109,,,N,N,545,5081,1204,183,72,16,436,634,127,89,,,888,643,4.2900000000,78,6,2,4044,1358,22,827,588,338,118,0.94,Philadelphia Athletics,Shibe Park,146223,96,99,PHA,PHA,PHA +1915,AL,SLA,BAL,,6,159,76,63,91,,,N,N,521,5112,1255,166,65,19,472,765,202,160,,,680,474,3.0400000000,76,6,7,4209,1256,21,612,566,336,144,0.94,St. Louis Browns,Sportsman's Park IV,150358,96,98,SLB,SLA,SLA +1915,AL,WS1,MIN,,4,155,80,85,68,,,N,N,569,5029,1225,152,79,12,458,541,186,106,,,491,358,2.3100000000,87,21,13,4179,1161,12,455,715,230,101,0.96,Washington Senators,Griffith Stadium I,167332,102,101,WSH,WS1,WS1 +1915,FL,BLF,BLT,,8,154,,47,107,,,N,,550,5060,1235,196,53,36,470,641,128,,,,760,598,3.9600000000,85,5,7,4080,1455,52,466,570,273,140,0.95,Baltimore Terrapins,,,103,105,BAL,BLF,BLF +1915,FL,BRF,BTT,,7,153,,70,82,,,N,,647,5035,1348,205,75,36,473,654,249,,,,673,507,3.3700000000,78,10,16,4065,1299,27,536,467,285,103,0.95,Brooklyn Tip-Tops,,,99,100,BTT,BRF,BRF +1915,FL,BUF,BFL,,6,153,,74,78,,,N,,574,5065,1261,193,68,40,420,587,184,,,,634,511,3.3800000000,79,14,11,4080,1271,35,553,594,232,112,0.96,Buffalo Blues,,,102,103,BUF,BUF,BUF +1915,FL,CHF,CHH,,2,155,,86,66,,,Y,,640,5133,1320,185,77,50,444,590,161,,,,538,410,2.6400000000,97,21,10,4191,1232,33,402,576,227,102,0.96,Chicago Whales,Wrigley Field,,94,92,CHI,CHF,CHF +1915,FL,KCF,KCP,,4,153,,81,72,,,N,,547,4937,1206,200,66,28,368,503,144,,,,551,426,2.8200000000,95,16,11,4077,1210,29,390,526,246,96,0.96,Kansas City Packers,,,97,97,KCP,KCF,KCF +1915,FL,NEW,NEW,,5,155,,80,72,,,N,,585,5097,1283,210,80,17,438,550,184,,,,562,406,2.6000000000,100,16,7,4218,1308,15,453,581,239,124,0.96,Newark Pepper,,,94,94,NEW,NEW,NEW +1915,FL,PTF,PBS,,3,156,,86,67,,,N,,592,5040,1318,180,80,20,448,561,224,,,,524,428,2.7900000000,88,16,12,4146,1273,37,441,517,174,98,0.97,Pittsburgh Rebels,,,99,99,PBS,PTF,PTF +1915,FL,SLF,SLI,,1,159,,87,67,,,N,,634,5145,1344,199,81,23,576,502,195,,,,527,433,2.7300000000,94,24,9,4278,1267,22,396,698,207,111,0.96,St. Louis Terriers,,,105,105,SLM,SLF,SLF +1915,NL,BRO,LAD,,3,154,78,80,72,,,N,N,536,5120,1268,165,75,14,313,496,131,126,,,560,411,2.6600000000,87,16,8,4167,1252,29,473,499,238,96,0.96,Brooklyn Robins,Ebbets Field,297766,102,101,BRO,BRO,BRO +1915,NL,BSN,ATL,,2,157,78,83,69,,,N,N,582,5070,1219,231,57,17,549,620,121,98,,,545,401,2.5700000000,95,17,13,4215,1257,23,366,630,213,115,0.96,Boston Braves,Fenway Park I / Braves Field,376283,98,97,BSN,BSN,BSN +1915,NL,CHN,CHC,,4,156,77,73,80,,,N,N,570,5114,1246,212,66,53,393,639,166,124,,,620,483,3.1100000000,71,18,8,4197,1272,28,480,657,268,94,0.95,Chicago Cubs,West Side Park II,217058,100,101,CHC,CHN,CHN +1915,NL,CIN,CIN,,7,160,79,71,83,,,N,N,516,5231,1323,194,84,15,360,512,156,142,,,585,452,2.8400000000,80,19,12,4296,1304,28,497,572,224,148,0.96,Cincinnati Reds,Crosley Field,218878,102,104,CIN,CIN,CIN +1915,NL,NY1,SFG,,8,155,76,69,83,,,N,N,582,5218,1312,195,68,24,315,547,155,137,,,628,479,3.1100000000,78,15,9,4155,1350,40,325,637,256,119,0.96,New York Giants,Polo Grounds IV,391850,94,93,NYG,NY1,NY1 +1915,NL,PHI,PHI,,1,153,76,90,62,,,Y,N,589,4916,1216,202,39,58,460,600,121,113,,,463,331,2.1700000000,98,20,8,4122,1161,26,342,652,216,99,0.96,Philadelphia Phillies,Baker Bowl,449898,101,100,PHI,PHI,PHI +1915,NL,PIT,PIT,,5,156,79,73,81,,,N,N,557,5113,1259,197,91,24,419,656,182,111,,,520,399,2.6000000000,91,18,11,4140,1229,21,384,544,214,100,0.96,Pittsburgh Pirates,Forbes Field,225743,99,99,PIT,PIT,PIT +1915,NL,SLN,STL,,6,157,81,72,81,,,N,N,590,5106,1297,159,92,20,457,658,162,144,,,601,450,2.8900000000,79,13,9,4200,1320,30,402,538,235,109,0.96,St. Louis Cardinals,Robison Field,252666,100,101,STL,SLN,SLN +1916,AL,BOS,BOS,,1,156,78,91,63,,,Y,Y,550,5018,1246,197,56,14,464,482,129,,,,480,389,2.4800000000,76,24,16,4230,1221,10,463,584,183,108,0.97,Boston Red Sox,Fenway Park I,496397,101,98,BOS,BOS,BOS +1916,AL,CHA,CHW,,2,155,77,89,65,,,N,N,601,5081,1277,194,100,17,447,591,197,,,,497,370,2.3600000000,73,20,15,4236,1189,14,405,644,205,134,0.96,Chicago White Sox,Comiskey Park,679923,101,98,CHW,CHA,CHA +1916,AL,CLE,CLE,,6,157,78,77,77,,,N,N,630,5064,1264,233,66,16,522,605,160,,,,602,454,2.9000000000,65,9,16,4230,1383,16,467,537,232,130,0.96,Cleveland Indians,League Park II,492106,106,106,CLE,CLE,CLE +1916,AL,DET,DET,,3,155,77,87,67,,,N,N,670,5193,1371,202,96,17,545,529,190,,,,595,465,2.9700000000,81,8,13,4230,1254,12,578,531,211,110,0.96,Detroit Tigers,Navin Field,616772,104,101,DET,DET,DET +1916,AL,NYA,NYY,,4,156,79,80,74,,,N,N,577,5198,1277,194,59,35,516,632,179,,,,561,440,2.7700000000,84,12,17,4284,1249,37,476,616,219,119,0.96,New York Yankees,Polo Grounds IV,469211,102,102,NYY,NYA,NYA +1916,AL,PHA,OAK,,8,154,76,36,117,,,N,N,447,5010,1212,169,65,19,406,631,151,,,,776,585,3.9200000000,94,11,3,4029,1311,26,715,575,312,126,0.95,Philadelphia Athletics,Shibe Park,184471,95,101,PHA,PHA,PHA +1916,AL,SLA,BAL,,5,158,79,79,75,,,N,N,588,5159,1262,181,50,14,627,640,234,,,,545,414,2.5800000000,74,9,13,4329,1292,15,478,505,248,120,0.96,St. Louis Browns,Sportsman's Park IV,335740,95,97,SLB,SLA,SLA +1916,AL,WS1,MIN,,7,159,81,76,77,,,N,N,536,5114,1238,170,60,12,535,597,185,,,,543,424,2.6700000000,85,11,7,4290,1271,14,490,706,232,119,0.96,Washington Senators,Griffith Stadium I,177265,99,99,WSH,WS1,WS1 +1916,NL,BRO,LAD,,1,156,78,94,60,,,Y,N,585,5234,1366,195,80,28,355,550,187,,,,471,336,2.1200000000,96,22,9,4281,1201,24,372,634,224,90,0.96,Brooklyn Robins,Ebbets Field,447747,103,102,BRO,BRO,BRO +1916,NL,BSN,ATL,,3,158,78,89,63,,,N,N,542,5075,1181,166,73,22,437,646,141,,,,453,344,2.1900000000,97,23,11,4245,1206,24,325,644,212,124,0.96,Boston Braves,Braves Field,313495,95,94,BSN,BSN,BSN +1916,NL,CHN,CHC,,5,156,79,67,86,,,N,N,520,5179,1237,194,56,46,399,662,133,,,,541,417,2.6500000000,72,17,13,4248,1265,32,365,616,277,104,0.95,Chicago Cubs,Wrigley Field,453685,110,111,CHC,CHN,CHN +1916,NL,CIN,CIN,,7,155,76,60,93,,,N,N,505,5254,1336,187,88,14,362,573,157,,,,617,485,3.1000000000,86,7,6,4224,1356,35,461,569,228,126,0.96,Cincinnati Reds,Crosley Field,255846,98,99,CIN,CIN,CIN +1916,NL,NY1,SFG,,4,155,78,86,66,,,N,N,597,5152,1305,188,74,42,356,558,206,,,,504,404,2.6000000000,88,22,12,4191,1267,41,310,638,217,108,0.96,New York Giants,Polo Grounds IV,552056,95,93,NYG,NY1,NY1 +1916,NL,PHI,PHI,,2,154,79,91,62,,,N,N,581,4985,1244,223,53,42,399,571,149,,,,489,362,2.3600000000,97,25,9,4146,1238,28,295,601,234,119,0.96,Philadelphia Phillies,Baker Bowl,515365,104,101,PHI,PHI,PHI +1916,NL,PIT,PIT,,6,157,78,65,89,,,N,N,484,5181,1246,147,91,20,372,618,173,,,,586,435,2.7600000000,88,11,7,4257,1277,24,443,596,260,97,0.95,Pittsburgh Pirates,Forbes Field,289132,101,102,PIT,PIT,PIT +1916,NL,SLN,STL,,7,153,76,60,93,,,N,N,476,5030,1223,155,74,25,335,651,182,,,,629,473,3.1400000000,58,13,15,4065,1331,31,445,529,273,124,0.95,St. Louis Cardinals,Robison Field,224308,99,101,STL,SLN,SLN +1917,AL,BOS,BOS,,2,157,80,90,62,,,N,N,555,5048,1243,198,64,14,466,473,105,,,,454,347,2.2000000000,115,15,7,4263,1197,12,413,509,183,116,0.97,Boston Red Sox,Fenway Park I,387856,99,97,BOS,BOS,BOS +1917,AL,CHA,CHW,,1,156,79,100,54,,,Y,Y,656,5057,1281,152,81,18,522,479,219,,,,464,342,2.1600000000,78,22,21,4272,1236,10,413,517,200,117,0.96,Chicago White Sox,Comiskey Park,684521,102,100,CHW,CHA,CHA +1917,AL,CLE,CLE,,3,156,78,88,66,,,N,N,584,4994,1224,218,64,13,549,596,210,,,,543,395,2.5200000000,73,20,22,4236,1270,17,438,451,242,136,0.96,Cleveland Indians,League Park II,477298,107,106,CLE,CLE,CLE +1917,AL,DET,DET,,4,154,76,78,75,,,N,N,639,5093,1317,204,77,25,483,476,163,,,,577,397,2.5600000000,78,20,15,4188,1209,12,504,516,234,95,0.96,Detroit Tigers,Navin Field,457289,100,99,DET,DET,DET +1917,AL,NYA,NYY,,6,155,75,71,82,,,N,N,524,5136,1226,172,52,27,496,535,136,,,,558,417,2.6600000000,87,10,6,4233,1280,28,427,571,225,129,0.96,New York Yankees,Polo Grounds IV,330294,101,101,NYY,NYA,NYA +1917,AL,PHA,OAK,,8,154,76,55,98,,,N,N,529,5109,1296,177,62,17,435,519,112,,,,691,496,3.2700000000,80,8,8,4095,1310,23,562,516,251,106,0.96,Philadelphia Athletics,Shibe Park,221432,98,103,PHA,PHA,PHA +1917,AL,SLA,BAL,,7,155,78,57,97,,,N,N,510,5091,1250,183,63,15,405,540,157,,,,687,492,3.2000000000,66,12,12,4155,1320,19,537,429,281,139,0.95,St. Louis Browns,Sportsman's Park IV,210486,96,98,SLB,SLA,SLA +1917,AL,WS1,MIN,,5,157,80,74,79,,,N,N,543,5142,1238,173,70,4,500,574,166,,,,566,432,2.7500000000,84,21,10,4239,1217,12,537,637,251,127,0.96,Washington Senators,Griffith Stadium I,89682,99,99,WSH,WS1,WS1 +1917,NL,BRO,LAD,,7,156,78,70,81,,,N,N,511,5251,1299,159,78,25,334,527,130,,,,559,439,2.7800000000,99,8,9,4263,1288,32,405,582,245,102,0.96,Brooklyn Robins,Ebbets Field,221619,103,103,BRO,BRO,BRO +1917,NL,BSN,ATL,,6,157,77,72,81,,,N,N,536,5201,1280,169,75,22,427,587,155,,,,552,438,2.7700000000,105,22,3,4272,1309,19,371,593,224,122,0.96,Boston Braves,Braves Field,174253,94,94,BSN,BSN,BSN +1917,NL,CHN,CHC,,5,157,77,74,80,,,N,N,552,5135,1229,194,67,17,415,599,127,,,,567,409,2.6200000000,79,16,9,4212,1303,34,374,654,267,121,0.95,Chicago Cubs,Wrigley Field,360218,108,107,CHC,CHN,CHN +1917,NL,CIN,CIN,,4,157,80,78,76,,,N,N,601,5251,1385,196,100,26,312,477,153,,,,611,419,2.7000000000,94,12,6,4191,1358,20,402,488,247,120,0.96,Cincinnati Reds,Crosley Field,269056,96,97,CIN,CIN,CIN +1917,NL,NY1,SFG,,1,158,80,98,56,,,Y,N,635,5211,1360,170,71,39,373,533,162,,,,457,360,2.2700000000,92,18,14,4278,1221,29,327,551,208,122,0.96,New York Giants,Polo Grounds IV,500264,97,94,NYG,NY1,NY1 +1917,NL,PHI,PHI,,2,154,76,87,65,,,N,N,578,5084,1262,225,60,38,435,533,109,,,,500,380,2.4600000000,102,22,5,4167,1258,25,325,616,212,112,0.96,Philadelphia Phillies,Baker Bowl,354428,104,104,PHI,PHI,PHI +1917,NL,PIT,PIT,,8,157,79,51,103,,,N,N,464,5169,1230,160,61,9,399,580,150,,,,595,474,3.0100000000,84,17,6,4251,1318,14,432,509,251,119,0.96,Pittsburgh Pirates,Forbes Field,192807,103,105,PIT,PIT,PIT +1917,NL,SLN,STL,,3,154,78,82,70,,,N,N,531,5083,1271,159,93,26,359,652,159,,,,567,469,3.0300000000,66,16,10,4176,1257,29,421,502,221,153,0.96,St. Louis Cardinals,Robison Field,288491,97,99,STL,SLN,SLN +1918,AL,BOS,BOS,,1,126,70,75,51,,,Y,Y,474,3982,990,159,54,15,406,324,110,,,,380,287,2.3100000000,105,26,2,3360,931,9,380,392,152,89,0.97,Boston Red Sox,Fenway Park I,249513,98,97,BOS,BOS,BOS +1918,AL,CHA,CHW,,6,124,56,57,67,,,N,N,457,4132,1057,136,55,8,375,358,116,,,,446,342,2.7300000000,76,9,8,3378,1092,9,300,349,167,98,0.96,Chicago White Sox,Comiskey Park,195081,101,98,CHW,CHA,CHA +1918,AL,CLE,CLE,,2,129,62,73,54,,,N,N,504,4166,1084,176,67,9,491,386,165,,,,447,341,2.6400000000,78,5,13,3483,1126,9,343,364,207,82,0.96,Cleveland Indians,League Park II,295515,109,108,CLE,CLE,CLE +1918,AL,DET,DET,,7,128,58,55,71,,,N,N,476,4262,1063,141,56,13,452,380,123,,,,557,438,3.4000000000,74,8,7,3480,1130,10,437,374,212,77,0.96,Detroit Tigers,Navin Field,203719,96,96,DET,DET,DET +1918,AL,NYA,NYY,,4,126,67,60,63,,,N,N,493,4224,1085,160,45,20,367,370,88,,,,475,386,3.0000000000,59,8,13,3471,1103,25,463,370,161,137,0.97,New York Yankees,Polo Grounds IV,282047,102,102,NYY,NYA,NYA +1918,AL,PHA,OAK,,8,130,68,52,76,,,N,N,412,4278,1039,124,44,22,343,485,83,,,,538,414,3.2200000000,80,13,9,3468,1106,13,486,277,228,136,0.95,Philadelphia Athletics,Shibe Park,177926,101,105,PHA,PHA,PHA +1918,AL,SLA,BAL,,5,123,53,58,64,,,N,N,426,4019,1040,152,40,5,397,340,138,,,,448,339,2.7500000000,67,8,8,3333,993,11,402,346,190,86,0.96,St. Louis Browns,Sportsman's Park IV,122076,97,99,SLB,SLA,SLA +1918,AL,WS1,MIN,,3,130,74,72,56,,,N,N,461,4472,1144,156,49,4,376,361,137,,,,412,292,2.1400000000,75,19,8,3684,1021,10,395,505,226,95,0.96,Washington Senators,Griffith Stadium I,182122,99,98,WSH,WS1,WS1 +1918,NL,BRO,LAD,,5,126,54,57,69,,,N,N,360,4212,1052,121,62,10,212,326,113,,,,463,353,2.8100000000,85,17,2,3393,1024,22,320,395,193,74,0.96,Brooklyn Robins,Ebbets Field,83831,100,101,BRO,BRO,BRO +1918,NL,BSN,ATL,,7,124,52,53,71,,,N,N,424,4162,1014,107,59,13,350,438,83,,,,469,360,2.9000000000,96,13,0,3351,1111,14,277,340,184,89,0.96,Boston Braves,Braves Field,84938,96,97,BSN,BSN,BSN +1918,NL,CHN,CHC,,1,131,74,84,45,,,Y,N,538,4325,1147,164,53,21,358,343,159,,,,393,290,2.1800000000,92,23,8,3591,1050,13,296,472,188,91,0.96,Chicago Cubs,Wrigley Field,337256,102,101,CHC,CHN,CHN +1918,NL,CIN,CIN,,3,129,71,68,60,,,N,N,530,4265,1185,165,84,15,304,303,128,,,,496,381,3.0000000000,84,14,6,3426,1136,19,381,321,192,127,0.96,Cincinnati Reds,Crosley Field,163009,98,97,CIN,CIN,CIN +1918,NL,NY1,SFG,,2,124,56,71,53,,,N,N,480,4164,1081,150,53,13,271,365,130,,,,415,326,2.6400000000,74,18,11,3333,1002,20,228,330,152,78,0.97,New York Giants,Polo Grounds IV,256618,98,95,NYG,NY1,NY1 +1918,NL,PHI,PHI,,6,125,57,55,68,,,N,N,430,4192,1022,158,28,25,346,400,97,,,,507,399,3.1500000000,78,10,6,3417,1086,22,369,312,211,91,0.96,Philadelphia Phillies,Baker Bowl,122266,107,108,PHI,PHI,PHI +1918,NL,PIT,PIT,,4,126,71,65,60,,,N,N,466,4091,1016,107,72,15,371,285,200,,,,412,314,2.4800000000,85,10,7,3420,1005,13,299,367,179,108,0.96,Pittsburgh Pirates,Forbes Field,213610,103,104,PIT,PIT,PIT +1918,NL,SLN,STL,,8,131,73,51,78,,,N,N,454,4369,1066,147,64,27,329,461,119,,,,527,392,2.9600000000,72,3,5,3579,1148,16,352,361,220,116,0.96,St. Louis Cardinals,Robison Field,110599,97,98,STL,SLN,SLN +1919,AL,BOS,BOS,,6,138,66,66,71,,,N,N,564,4548,1188,181,49,33,471,411,108,,,,552,450,3.3100000000,89,15,8,3672,1251,16,421,381,143,118,0.97,Boston Red Sox,Fenway Park I,417291,94,94,BOS,BOS,BOS +1919,AL,CHA,CHW,,1,140,70,88,52,,,Y,N,667,4675,1343,218,70,25,427,358,150,,,,534,427,3.0400000000,88,14,3,3795,1245,24,342,468,173,116,0.96,Chicago White Sox,Comiskey Park,627186,100,99,CHW,CHA,CHA +1919,AL,CLE,CLE,,2,139,69,84,55,,,N,N,636,4565,1268,254,72,24,498,367,113,,,,537,407,2.9400000000,80,10,10,3735,1242,19,362,432,201,102,0.96,Cleveland Indians,League Park II,538135,106,104,CLE,CLE,CLE +1919,AL,DET,DET,,4,140,70,80,60,,,N,N,618,4665,1319,222,84,23,429,427,121,,,,578,461,3.3000000000,85,10,4,3768,1254,35,436,428,205,81,0.96,Detroit Tigers,Navin Field,643805,98,100,DET,DET,DET +1919,AL,NYA,NYY,,3,141,73,80,59,,,N,N,578,4775,1275,193,49,45,386,479,101,,,,506,403,2.8200000000,85,14,7,3861,1143,47,433,500,193,108,0.96,New York Yankees,Polo Grounds IV,619164,101,99,NYY,NYA,NYA +1919,AL,PHA,OAK,,8,140,70,36,104,,,N,N,457,4730,1156,175,71,35,349,565,103,,,,742,586,4.2600000000,72,1,3,3717,1371,44,503,417,257,96,0.95,Philadelphia Athletics,Shibe Park,225209,101,106,PHA,PHA,PHA +1919,AL,SLA,BAL,,5,140,70,67,72,,,N,N,533,4672,1234,187,73,31,391,443,74,,,,567,437,3.1300000000,78,14,4,3768,1255,35,421,415,214,98,0.96,St. Louis Browns,Sportsman's Park IV,349350,102,103,SLB,SLA,SLA +1919,AL,WS1,MIN,,7,142,72,56,84,,,N,N,533,4757,1238,177,63,24,416,511,142,,,,570,426,3.0100000000,68,13,10,3822,1237,20,451,536,227,86,0.96,Washington Senators,Griffith Stadium I,234096,99,99,WSH,WS1,WS1 +1919,NL,BRO,LAD,,5,141,70,69,71,,,N,N,525,4844,1272,167,66,25,258,405,112,,,,513,389,2.7300000000,98,12,1,3843,1256,21,292,476,218,84,0.96,Brooklyn Robins,Ebbets Field,360721,103,103,BRO,BRO,BRO +1919,NL,BSN,ATL,,6,140,68,57,82,,,N,N,465,4746,1201,142,62,24,355,481,145,,,,563,447,3.1700000000,79,5,9,3810,1313,29,337,374,204,111,0.96,Boston Braves,Braves Field,167401,95,98,BSN,BSN,BSN +1919,NL,CHN,CHC,,3,140,71,75,65,,,N,N,454,4581,1174,166,58,21,298,359,150,,,,407,311,2.2100000000,80,21,5,3795,1127,14,294,495,186,87,0.96,Chicago Cubs,Wrigley Field,424430,100,99,CHC,CHN,CHN +1919,NL,CIN,CIN,,1,140,70,96,44,,,Y,Y,577,4577,1204,135,83,20,405,368,143,,,,401,316,2.2300000000,89,23,9,3822,1104,21,298,407,152,98,0.97,Cincinnati Reds,Crosley Field,532501,97,95,CIN,CIN,CIN +1919,NL,NY1,SFG,,2,140,69,87,53,,,N,N,605,4664,1254,204,64,40,328,407,157,,,,470,377,2.7000000000,72,11,13,3768,1153,34,305,340,215,96,0.96,New York Giants,Polo Grounds IV,708857,100,97,NYG,NY1,NY1 +1919,NL,PHI,PHI,,8,138,71,47,90,,,N,N,510,4746,1191,208,50,42,323,469,114,,,,699,576,4.1400000000,93,6,2,3756,1391,40,408,397,219,112,0.96,Philadelphia Phillies,Baker Bowl,240424,107,111,PHI,PHI,PHI +1919,NL,PIT,PIT,,4,139,70,71,68,,,N,N,472,4538,1132,130,82,17,344,381,196,,,,466,400,2.8800000000,91,17,4,3747,1113,23,263,391,160,89,0.96,Pittsburgh Pirates,Forbes Field,276810,104,103,PIT,PIT,PIT +1919,NL,SLN,STL,,7,138,69,54,83,,,N,N,463,4588,1175,163,52,18,304,418,148,,,,552,437,3.2300000000,55,6,8,3651,1146,25,415,414,217,112,0.96,St. Louis Cardinals,Robison Field,167059,94,96,STL,SLN,SLN +1920,AL,BOS,BOS,,5,154,76,72,81,,,N,N,650,5199,1397,216,71,22,533,429,98,111,,,698,592,3.8200000000,92,11,6,4185,1481,39,461,481,183,131,0.97,Boston Red Sox,Fenway Park I,402445,96,96,BOS,BOS,BOS +1920,AL,CHA,CHW,,2,154,77,96,58,,,N,N,794,5328,1574,263,98,37,471,353,112,96,,,665,553,3.5900000000,109,9,10,4158,1467,45,405,438,194,142,0.96,Chicago White Sox,Comiskey Park,833492,99,99,CHW,CHA,CHA +1920,AL,CLE,CLE,,1,154,78,98,56,,,Y,Y,857,5203,1574,300,95,35,574,379,73,92,,,642,522,3.4100000000,94,11,7,4131,1448,31,401,466,185,124,0.97,Cleveland Indians,League Park II,912832,104,101,CLE,CLE,CLE +1920,AL,DET,DET,,7,155,78,61,93,,,N,N,652,5215,1408,228,72,30,479,391,76,66,,,833,622,4.0400000000,74,9,7,4155,1487,46,561,483,229,95,0.96,Detroit Tigers,Navin Field,579650,97,98,DET,DET,DET +1920,AL,NYA,NYY,,3,154,77,95,59,,,N,N,838,5176,1448,268,71,115,539,626,64,82,,,629,505,3.3200000000,88,15,11,4104,1414,48,420,480,193,129,0.97,New York Yankees,Polo Grounds IV,1289422,104,101,NYY,NYA,NYA +1920,AL,PHA,OAK,,8,156,77,48,106,,,N,N,558,5256,1324,220,49,44,353,593,50,67,,,834,603,3.9300000000,79,6,2,4140,1612,56,461,423,267,126,0.95,Philadelphia Athletics,Shibe Park,287888,101,106,PHA,PHA,PHA +1920,AL,SLA,BAL,,4,154,78,76,77,,,N,N,797,5358,1651,279,83,50,427,339,118,79,,,766,617,4.0300000000,84,9,14,4134,1481,53,578,444,231,119,0.96,St. Louis Browns,Sportsman's Park IV,419311,103,103,SLB,SLA,SLA +1920,AL,WS1,MIN,,6,153,76,68,84,,,N,N,723,5251,1526,233,81,36,433,543,161,114,,,802,633,4.1700000000,81,10,10,4101,1521,51,520,418,232,95,0.96,Washington Senators,Griffith Stadium I,359260,97,98,WSH,WS1,WS1 +1920,NL,BRO,LAD,,1,155,78,93,61,,,Y,N,660,5399,1493,205,99,28,359,391,70,80,,,528,415,2.6200000000,89,17,10,4281,1381,25,327,553,226,118,0.96,Brooklyn Robins,Ebbets Field,808722,104,103,BRO,BRO,BRO +1920,NL,BSN,ATL,,7,153,74,62,90,,,N,N,523,5218,1358,168,86,23,385,488,88,98,,,670,545,3.5400000000,93,14,6,4158,1464,39,415,368,239,125,0.96,Boston Braves,Braves Field,162483,95,97,BSN,BSN,BSN +1920,NL,CHN,CHC,,5,154,77,75,79,,,N,N,619,5117,1350,223,67,34,428,421,115,129,,,635,504,3.2700000000,95,13,9,4164,1459,37,382,508,225,112,0.96,Chicago Cubs,Wrigley Field,480783,101,102,CHC,CHN,CHN +1920,NL,CIN,CIN,,3,154,77,82,71,,,N,N,639,5176,1432,169,76,18,382,367,158,128,,,569,448,2.9000000000,90,12,9,4173,1327,26,393,435,200,125,0.96,Cincinnati Reds,Crosley Field,568107,98,97,CIN,CIN,CIN +1920,NL,NY1,SFG,,2,155,80,86,68,,,N,N,682,5309,1427,210,76,46,432,545,131,113,,,543,438,2.8000000000,86,18,9,4224,1379,44,297,380,209,137,0.96,New York Giants,Polo Grounds IV,929609,100,97,NYG,NY1,NY1 +1920,NL,PHI,PHI,,8,153,77,62,91,,,N,N,565,5264,1385,229,54,64,283,531,100,83,,,714,557,3.6300000000,77,8,11,4140,1480,35,444,419,232,135,0.96,Philadelphia Phillies,Baker Bowl,330998,104,109,PHI,PHI,PHI +1920,NL,PIT,PIT,,4,155,78,79,75,,,N,N,530,5219,1342,162,90,16,374,405,181,117,,,552,454,2.8900000000,92,17,10,4245,1389,25,280,444,186,119,0.97,Pittsburgh Pirates,Forbes Field,429037,103,103,PIT,PIT,PIT +1920,NL,SLN,STL,,5,155,76,75,79,,,N,N,675,5495,1589,238,96,32,373,484,126,114,,,682,543,3.4300000000,72,9,12,4278,1488,30,479,529,256,136,0.96,St. Louis Cardinals,Robison Field/Sportsman's Park IV,326836,98,98,STL,SLN,SLN +1921,AL,BOS,BOS,,5,154,77,75,79,,,N,N,668,5206,1440,248,69,17,428,344,83,65,,,696,603,3.9800000000,88,9,5,4092,1521,53,452,446,157,151,0.97,Boston Red Sox,Fenway Park I,279273,97,99,BOS,BOS,BOS +1921,AL,CHA,CHW,,7,154,77,62,92,,,N,N,683,5329,1509,242,82,35,445,474,97,93,,,858,749,4.9400000000,84,7,9,4095,1603,52,549,392,199,155,0.96,Chicago White Sox,Comiskey Park,543650,98,98,CHW,CHA,CHA +1921,AL,CLE,CLE,,2,154,77,94,60,,,N,N,925,5383,1656,355,90,42,623,376,50,42,,,712,597,3.9000000000,81,11,14,4131,1534,43,431,475,204,124,0.96,Cleveland Indians,League Park II,748705,102,100,CLE,CLE,CLE +1921,AL,DET,DET,,6,154,77,71,82,,,N,N,883,5461,1724,268,100,58,582,376,95,89,,,852,678,4.4000000000,73,4,16,4158,1634,71,495,452,231,107,0.96,Detroit Tigers,Navin Field,661527,99,100,DET,DET,DET +1921,AL,NYA,NYY,,1,153,78,98,55,,,Y,N,948,5249,1576,285,87,134,588,569,89,64,,,708,579,3.8200000000,92,8,15,4092,1461,51,470,481,220,138,0.96,New York Yankees,Polo Grounds IV,1230696,102,98,NYY,NYA,NYA +1921,AL,PHA,OAK,,8,155,77,53,100,,,N,N,657,5465,1497,256,64,82,424,565,68,55,,,894,717,4.6100000000,75,2,7,4200,1645,85,548,431,277,144,0.95,Philadelphia Athletics,Shibe Park,344430,100,104,PHA,PHA,PHA +1921,AL,SLA,BAL,,3,154,77,81,73,,,N,N,835,5442,1655,246,106,67,413,407,92,71,,,845,706,4.6100000000,77,9,9,4137,1541,71,556,477,224,127,0.96,St. Louis Browns,Sportsman's Park IV,355978,106,105,SLB,SLA,SLA +1921,AL,WS1,MIN,,4,154,76,80,73,,,N,N,704,5294,1468,240,96,42,462,472,111,66,,,738,610,3.9700000000,80,10,10,4149,1568,51,442,452,234,153,0.96,Washington Senators,Griffith Stadium I,456069,95,96,WSH,WS1,WS1 +1921,NL,BRO,LAD,,5,152,78,77,75,,,N,N,667,5263,1476,209,85,59,325,400,91,73,,,681,560,3.7000000000,82,8,12,4089,1556,46,361,471,232,142,0.96,Brooklyn Robins,Ebbets Field,613245,105,104,BRO,BRO,BRO +1921,NL,BSN,ATL,,4,153,74,79,74,,,N,N,721,5385,1561,209,100,61,377,470,94,100,,,697,600,3.9000000000,74,11,12,4155,1488,54,420,382,199,122,0.96,Boston Braves,Braves Field,318627,94,96,BSN,BSN,BSN +1921,NL,CHN,CHC,,7,153,76,64,89,,,N,N,668,5321,1553,234,56,37,343,374,70,97,,,773,665,4.3900000000,73,7,7,4089,1605,67,409,441,166,129,0.97,Chicago Cubs,Wrigley Field,410107,100,101,CHC,CHN,CHN +1921,NL,CIN,CIN,,6,153,76,70,83,,,N,N,618,5112,1421,221,94,20,375,308,117,120,,,649,524,3.4600000000,83,7,9,4089,1500,37,305,408,193,139,0.96,Cincinnati Reds,Crosley Field,311227,95,94,CIN,CIN,CIN +1921,NL,NY1,SFG,,1,153,79,94,59,,,Y,Y,840,5278,1575,237,93,75,469,390,137,114,,,637,541,3.5500000000,71,9,18,4116,1497,79,295,357,187,155,0.97,New York Giants,Polo Grounds IV,973477,102,98,NYG,NY1,NY1 +1921,NL,PHI,PHI,,8,154,76,51,103,,,N,N,617,5329,1512,238,50,88,294,615,66,80,,,919,671,4.4800000000,82,5,8,4044,1665,79,371,333,294,127,0.95,Philadelphia Phillies,Baker Bowl,273961,107,111,PHI,PHI,PHI +1921,NL,PIT,PIT,,2,154,76,90,63,,,N,N,692,5379,1533,231,104,37,341,371,134,93,,,595,498,3.1700000000,88,10,10,4245,1448,37,322,500,171,129,0.97,Pittsburgh Pirates,Forbes Field,701567,102,101,PIT,PIT,PIT +1921,NL,SLN,STL,,3,154,78,87,66,,,N,N,809,5309,1635,260,88,83,382,452,94,94,,,681,551,3.6200000000,70,10,16,4113,1486,61,399,464,219,130,0.96,St. Louis Cardinals,Sportsman's Park IV,384773,97,96,STL,SLN,SLN +1922,AL,BOS,BOS,,8,154,73,61,93,,,N,N,598,5288,1392,250,55,45,366,455,60,63,,,769,656,4.3000000000,71,10,6,4119,1508,48,503,359,221,139,0.96,Boston Red Sox,Fenway Park I,259184,99,101,BOS,BOS,BOS +1922,AL,CHA,CHW,,5,155,77,77,77,,,N,N,691,5267,1463,243,62,45,482,463,106,84,,,691,614,3.9400000000,86,13,8,4209,1472,57,529,484,153,132,0.97,Chicago White Sox,Comiskey Park,602860,99,100,CHW,CHA,CHA +1922,AL,CLE,CLE,,4,155,80,78,76,,,N,N,768,5293,1544,320,73,32,554,331,89,58,,,817,705,4.5900000000,76,14,7,4149,1605,58,464,489,201,140,0.96,Cleveland Indians,League Park II,528145,102,100,CLE,CLE,CLE +1922,AL,DET,DET,,3,155,77,79,75,,,N,N,828,5360,1641,250,87,54,530,378,78,61,,,791,660,4.2700000000,67,7,15,4173,1554,62,473,461,192,135,0.97,Detroit Tigers,Navin Field,861206,97,96,DET,DET,DET +1922,AL,NYA,NYY,,1,154,77,94,60,,,Y,N,758,5245,1504,220,75,95,497,532,62,59,,,618,525,3.3900000000,100,7,14,4179,1402,73,423,458,155,122,0.97,New York Yankees,Polo Grounds IV,1026134,102,98,NYY,NYA,NYA +1922,AL,PHA,OAK,,7,155,78,65,89,,,N,N,705,5211,1409,229,63,111,437,591,60,63,,,830,695,4.5900000000,73,4,6,4086,1573,107,469,373,218,119,0.96,Philadelphia Athletics,Shibe Park,425356,102,105,PHA,PHA,PHA +1922,AL,SLA,BAL,,2,154,77,93,61,,,N,N,867,5416,1693,291,94,98,473,381,132,73,,,643,523,3.3800000000,79,8,22,4176,1412,71,419,534,196,158,0.96,St. Louis Browns,Sportsman's Park IV,712918,104,103,SLB,SLA,SLA +1922,AL,WS1,MIN,,6,154,79,69,85,,,N,N,650,5201,1395,229,76,45,458,442,94,54,,,706,577,3.8100000000,84,13,10,4086,1485,49,500,422,201,161,0.96,Washington Senators,Griffith Stadium I,458552,95,96,WSH,WS1,WS1 +1922,NL,BRO,LAD,,6,155,78,76,78,,,N,N,743,5413,1569,235,76,56,339,318,79,60,,,754,623,4.0500000000,82,12,8,4155,1574,74,490,499,208,139,0.96,Brooklyn Robins,Ebbets Field,498865,100,100,BRO,BRO,BRO +1922,NL,BSN,ATL,,8,154,76,53,100,,,N,N,596,5161,1355,162,73,32,387,451,67,65,,,822,655,4.3700000000,63,7,6,4044,1565,57,489,360,215,121,0.96,Boston Braves,Braves Field,167965,95,97,BSN,BSN,BSN +1922,NL,CHN,CHC,,5,156,76,80,74,,,N,N,771,5335,1564,248,71,42,525,447,97,108,,,808,674,4.3400000000,74,8,12,4191,1579,77,475,402,202,154,0.96,Chicago Cubs,Wrigley Field,542283,102,102,CHC,CHN,CHN +1922,NL,CIN,CIN,,2,156,79,86,68,,,N,N,766,5282,1561,226,99,45,436,381,130,136,,,677,543,3.5300000000,88,8,3,4155,1481,49,326,357,205,147,0.96,Cincinnati Reds,Crosley Field,493754,98,97,CIN,CIN,CIN +1922,NL,NY1,SFG,,1,156,79,93,61,,,Y,Y,852,5454,1661,253,90,80,448,421,116,83,,,658,535,3.4500000000,76,7,15,4188,1454,71,393,388,194,145,0.97,New York Giants,Polo Grounds IV,945809,102,98,NYG,NY1,NY1 +1922,NL,PHI,PHI,,7,154,77,57,96,,,N,N,738,5459,1537,268,55,116,450,611,48,60,,,920,707,4.6400000000,73,6,5,4116,1692,89,460,394,222,152,0.96,Philadelphia Phillies,Baker Bowl,232471,108,113,PHI,PHI,PHI +1922,NL,PIT,PIT,,3,155,78,85,69,,,N,N,865,5521,1698,239,110,52,423,326,145,59,,,736,613,3.9800000000,88,15,7,4161,1613,52,358,490,187,126,0.97,Pittsburgh Pirates,Forbes Field,523675,102,100,PIT,PIT,PIT +1922,NL,SLN,STL,,3,154,77,85,69,,,N,N,863,5425,1634,280,88,107,447,425,73,63,,,819,672,4.4400000000,60,8,12,4086,1609,61,447,465,239,122,0.96,St. Louis Cardinals,Sportsman's Park IV,536998,95,94,STL,SLN,SLN +1923,AL,BOS,BOS,,8,154,78,61,91,,,N,N,584,5181,1354,253,54,34,391,480,77,91,,,809,640,4.2000000000,77,3,11,4116,1534,48,520,412,232,126,0.96,Boston Red Sox,Fenway Park I,229688,100,103,BOS,BOS,BOS +1923,AL,CHA,CHW,,7,156,75,69,85,,,N,N,692,5246,1463,254,57,42,532,458,191,119,,,741,629,4.0500000000,74,5,11,4191,1512,49,534,467,181,138,0.97,Chicago White Sox,Comiskey Park,573778,99,99,CHW,CHA,CHA +1923,AL,CLE,CLE,,3,153,78,82,71,,,N,N,888,5290,1594,301,75,59,633,384,79,77,,,746,598,3.9100000000,77,10,11,4128,1517,36,465,407,227,143,0.96,Cleveland Indians,League Park II,558856,100,100,CLE,CLE,CLE +1923,AL,DET,DET,,2,155,77,83,71,,,N,N,831,5266,1579,270,69,41,596,385,87,62,,,741,624,4.0900000000,61,9,12,4119,1502,58,449,447,200,103,0.96,Detroit Tigers,Navin Field,911377,98,97,DET,DET,DET +1923,AL,NYA,NYY,,1,152,76,98,54,,,Y,Y,823,5347,1554,231,79,105,521,516,69,74,,,622,555,3.6200000000,101,9,10,4140,1365,68,491,506,144,131,0.97,New York Yankees,Yankee Stadium I,1007066,103,100,NYY,NYA,NYA +1923,AL,PHA,OAK,,6,153,75,69,83,,,N,N,661,5196,1407,229,64,53,445,517,72,62,,,761,618,4.0800000000,65,7,12,4092,1465,68,550,400,225,127,0.96,Philadelphia Athletics,Shibe Park,534122,101,103,PHA,PHA,PHA +1923,AL,SLA,BAL,,5,154,78,74,78,,,N,N,688,5298,1489,248,62,82,442,423,64,54,,,720,600,3.9300000000,83,10,10,4119,1430,59,528,488,176,145,0.97,St. Louis Browns,Sportsman's Park IV,430296,106,105,SLB,SLA,SLA +1923,AL,WS1,MIN,,4,155,79,75,78,,,N,N,720,5244,1436,224,93,26,532,448,102,67,,,747,608,3.9800000000,71,8,16,4122,1527,56,563,474,213,182,0.96,Washington Senators,Griffith Stadium I,357406,95,95,WSH,WS1,WS1 +1923,NL,BRO,LAD,,6,155,78,76,78,,,N,N,753,5476,1559,214,81,62,425,382,71,50,,,741,580,3.7400000000,94,8,5,4188,1503,55,476,548,291,137,0.95,Brooklyn Robins,Ebbets Field,564666,98,97,BRO,BRO,BRO +1923,NL,BSN,ATL,,7,155,77,54,100,,,N,N,636,5329,1455,213,58,32,429,404,57,80,,,798,651,4.2100000000,54,13,7,4176,1662,64,394,351,230,157,0.96,Boston Braves,Braves Field,227802,95,99,BSN,BSN,BSN +1923,NL,CHN,CHC,,4,154,77,83,71,,,N,N,756,5259,1516,243,52,90,455,485,181,143,,,704,580,3.8200000000,80,8,11,4098,1419,86,435,408,208,144,0.96,Chicago Cubs,Wrigley Field,703705,100,100,CHC,CHN,CHN +1923,NL,CIN,CIN,,2,154,78,91,63,,,N,N,708,5278,1506,237,95,45,439,367,96,105,,,629,496,3.2100000000,88,11,9,4173,1465,28,359,450,202,144,0.96,Cincinnati Reds,Crosley Field,575063,98,97,CIN,CIN,CIN +1923,NL,NY1,SFG,,1,153,77,95,58,,,Y,N,854,5452,1610,248,76,85,487,406,106,70,,,679,597,3.9000000000,62,10,18,4134,1440,82,424,453,176,141,0.97,New York Giants,Polo Grounds IV,820780,100,96,NYG,NY1,NY1 +1923,NL,PHI,PHI,,8,155,75,50,104,,,N,N,748,5491,1528,259,39,112,414,556,70,73,,,1008,816,5.3400000000,68,3,8,4128,1801,100,549,384,213,172,0.96,Philadelphia Phillies,Baker Bowl,228168,111,115,PHI,PHI,PHI +1923,NL,PIT,PIT,,3,154,77,87,67,,,N,N,786,5405,1592,224,111,49,407,362,154,75,,,696,592,3.8700000000,92,5,9,4128,1513,53,402,414,179,157,0.97,Pittsburgh Pirates,Forbes Field,611082,102,100,PIT,PIT,PIT +1923,NL,SLN,STL,,5,154,78,79,74,,,N,N,746,5526,1582,274,76,63,438,446,89,61,,,732,601,3.8700000000,77,9,7,4194,1539,70,456,398,230,141,0.96,St. Louis Cardinals,Sportsman's Park IV,338551,97,97,STL,SLN,SLN +1924,AL,BOS,BOS,,7,157,77,67,87,,,N,N,737,5340,1481,302,63,30,603,417,79,61,,,806,672,4.3500000000,73,8,16,4173,1563,43,523,414,207,124,0.96,Boston Red Sox,Fenway Park I,448556,99,103,BOS,BOS,BOS +1924,AL,CHA,CHW,,8,154,77,66,87,,,N,N,793,5255,1512,254,58,41,604,418,138,86,,,858,722,4.7400000000,76,1,11,4110,1635,52,512,360,230,136,0.96,Chicago White Sox,Comiskey Park,606658,97,97,CHW,CHA,CHA +1924,AL,CLE,CLE,,6,153,75,67,86,,,N,N,755,5332,1580,306,59,41,492,371,84,56,,,814,660,4.4000000000,87,7,7,4047,1603,43,503,315,201,130,0.96,Cleveland Indians,League Park II,481905,102,101,CLE,CLE,CLE +1924,AL,DET,DET,,3,156,78,86,68,,,N,N,849,5389,1604,315,76,35,607,400,100,76,,,796,649,4.1900000000,60,5,20,4182,1586,55,467,441,186,142,0.97,Detroit Tigers,Navin Field,1015136,98,97,DET,DET,DET +1924,AL,NYA,NYY,,2,153,78,89,63,,,N,N,798,5240,1516,248,86,98,478,420,69,64,,,667,583,3.8600000000,76,13,13,4077,1483,59,522,487,154,131,0.97,New York Yankees,Yankee Stadium I,1053533,100,99,NYY,NYA,NYA +1924,AL,PHA,OAK,,5,152,75,71,81,,,N,N,685,5184,1459,251,59,63,374,482,79,66,,,778,656,4.3900000000,68,8,10,4035,1527,43,597,371,181,157,0.97,Philadelphia Athletics,Shibe Park,531992,101,101,PHA,PHA,PHA +1924,AL,SLA,BAL,,4,153,78,74,78,,,N,N,769,5236,1543,266,62,67,465,349,85,85,,,809,687,4.5700000000,65,11,7,4059,1511,68,517,386,176,141,0.97,St. Louis Browns,Sportsman's Park IV,533349,106,107,SLB,SLA,SLA +1924,AL,WS1,MIN,,1,156,79,92,62,,,Y,Y,755,5304,1558,255,88,22,513,392,115,87,,,613,513,3.3400000000,74,13,25,4149,1329,34,505,469,171,149,0.97,Washington Senators,Griffith Stadium I,584310,98,96,WSH,WS1,WS1 +1924,NL,BRO,LAD,,2,154,77,92,62,,,N,N,717,5339,1534,227,54,72,447,357,34,46,,,675,557,3.6400000000,97,10,5,4128,1432,58,403,638,196,121,0.96,Brooklyn Robins,Ebbets Field,818883,97,97,BRO,BRO,BRO +1924,NL,BSN,ATL,,8,154,76,53,100,,,N,N,520,5283,1355,194,52,25,354,451,74,68,,,800,683,4.4600000000,66,10,4,4137,1607,49,402,364,168,154,0.97,Boston Braves,Braves Field,177478,95,98,BSN,BSN,BSN +1924,NL,CHN,CHC,,5,154,78,81,72,,,N,N,698,5134,1419,207,59,66,469,521,137,149,,,699,587,3.8300000000,85,4,6,4140,1459,89,438,416,218,153,0.96,Chicago Cubs,Wrigley Field,716922,101,101,CHC,CHN,CHN +1924,NL,CIN,CIN,,4,153,76,83,70,,,N,N,649,5301,1539,236,111,36,349,334,103,98,,,579,478,3.1200000000,77,14,9,4134,1408,30,293,451,217,142,0.96,Cincinnati Reds,Crosley Field,473707,99,97,CIN,CIN,CIN +1924,NL,NY1,SFG,,1,154,77,93,60,,,Y,N,857,5445,1634,269,81,95,467,479,82,53,,,641,554,3.6200000000,71,4,21,4134,1464,77,392,406,186,160,0.97,New York Giants,Polo Grounds IV,844068,98,95,NYG,NY1,NY1 +1924,NL,PHI,PHI,,7,152,76,55,96,,,N,N,676,5306,1459,256,56,94,382,452,57,67,,,849,733,4.8700000000,59,7,10,4062,1689,84,469,349,175,168,0.97,Philadelphia Phillies,Baker Bowl,299818,112,115,PHI,PHI,PHI +1924,NL,PIT,PIT,,3,153,77,90,63,,,N,N,724,5288,1517,222,122,44,366,396,181,92,,,588,502,3.2700000000,85,15,5,4146,1387,42,323,364,183,161,0.97,Pittsburgh Pirates,Forbes Field,736883,102,99,PIT,PIT,PIT +1924,NL,SLN,STL,,6,154,77,65,89,,,N,N,740,5349,1552,270,87,67,382,418,86,86,,,750,629,4.1500000000,79,7,6,4092,1528,70,486,393,191,162,0.96,St. Louis Cardinals,Sportsman's Park IV,272885,98,98,STL,SLN,SLN +1925,AL,BOS,BOS,,8,152,75,47,105,,,N,N,639,5166,1375,257,64,41,513,422,42,56,,,922,732,4.9700000000,68,6,6,3978,1615,67,510,310,265,150,0.95,Boston Red Sox,Fenway Park I,267782,99,103,BOS,BOS,BOS +1925,AL,CHA,CHW,,5,154,77,79,75,,,N,N,811,5224,1482,299,59,38,662,405,129,88,,,770,660,4.2900000000,71,12,13,4155,1579,69,489,374,198,162,0.96,Chicago White Sox,Comiskey Park,832231,95,95,CHW,CHA,CHA +1925,AL,CLE,CLE,,6,155,77,70,84,,,N,N,782,5436,1613,285,58,52,520,379,90,77,,,817,684,4.4900000000,93,6,9,4116,1604,41,493,345,212,146,0.96,Cleveland Indians,League Park II,419005,101,101,CLE,CLE,CLE +1925,AL,DET,DET,,4,156,77,81,73,,,N,N,903,5371,1621,277,84,50,640,386,97,63,,,829,708,4.6100000000,66,2,18,4149,1582,70,556,419,171,143,0.97,Detroit Tigers,Navin Field,820766,98,98,DET,DET,DET +1925,AL,NYA,NYY,,7,156,79,69,85,,,N,N,706,5353,1471,247,74,110,470,482,67,73,,,774,667,4.3300000000,80,8,13,4161,1560,78,505,492,162,150,0.97,New York Yankees,Yankee Stadium I,697267,98,97,NYY,NYA,NYA +1925,AL,PHA,OAK,,2,153,77,88,64,,,N,N,831,5399,1659,298,79,76,453,432,67,59,,,713,594,3.8700000000,61,8,18,4143,1468,60,544,495,214,148,0.96,Philadelphia Athletics,Shibe Park,869703,107,106,PHA,PHA,PHA +1925,AL,SLA,BAL,,3,154,78,82,71,,,N,N,900,5440,1620,304,68,110,498,375,85,78,,,906,754,4.9200000000,67,7,10,4137,1588,99,675,419,219,164,0.96,St. Louis Browns,Sportsman's Park IV,462898,105,106,SLB,SLA,SLA +1925,AL,WS1,MIN,,1,152,76,96,55,,,Y,N,829,5206,1577,251,71,56,533,427,134,88,,,670,558,3.7000000000,69,10,21,4074,1434,49,543,463,172,166,0.97,Washington Senators,Griffith Stadium I,817199,99,97,WSH,WS1,WS1 +1925,NL,BRO,LAD,,6,153,77,68,85,,,N,N,786,5468,1617,250,80,64,437,383,37,30,,,866,715,4.7700000000,82,4,4,4050,1608,75,477,518,209,130,0.96,Brooklyn Robins,Ebbets Field,659435,97,97,BRO,BRO,BRO +1925,NL,BSN,ATL,,5,153,76,70,83,,,N,N,708,5365,1567,260,70,41,405,380,77,72,,,802,666,4.3900000000,77,5,4,4098,1567,67,458,351,221,145,0.96,Boston Braves,Braves Field,313528,91,94,BSN,BSN,BSN +1925,NL,CHN,CHC,,8,154,77,68,86,,,N,N,723,5353,1473,254,70,86,397,470,94,70,,,773,671,4.4100000000,75,5,10,4110,1575,102,485,435,198,161,0.96,Chicago Cubs,Wrigley Field,622610,102,102,CHC,CHN,CHN +1925,NL,CIN,CIN,,3,153,76,80,73,,,N,N,690,5233,1490,221,90,44,409,327,108,107,,,643,516,3.3800000000,92,11,12,4125,1447,35,324,437,203,161,0.96,Cincinnati Reds,Crosley Field,464920,98,96,CIN,CIN,CIN +1925,NL,NY1,SFG,,2,152,76,86,66,,,N,N,736,5327,1507,239,61,114,411,494,79,65,,,702,593,3.9400000000,80,6,8,4062,1532,73,408,446,198,129,0.96,New York Giants,Polo Grounds IV,778993,96,95,NYG,NY1,NY1 +1925,NL,PHI,PHI,,6,153,77,68,85,,,N,N,812,5412,1598,288,58,100,456,542,48,59,,,930,753,5.0200000000,69,8,9,4050,1753,117,444,371,211,147,0.96,Philadelphia Phillies,Baker Bowl,304905,108,112,PHI,PHI,PHI +1925,NL,PIT,PIT,,1,153,77,95,58,,,Y,Y,912,5372,1651,316,105,78,499,363,159,63,,,715,582,3.8700000000,77,2,13,4062,1526,81,387,386,224,171,0.96,Pittsburgh Pirates,Forbes Field,804354,106,104,PIT,PIT,PIT +1925,NL,SLN,STL,,4,153,76,77,76,,,N,N,828,5329,1592,292,80,109,446,414,70,51,,,764,647,4.3600000000,82,8,7,4005,1480,86,470,428,204,156,0.96,St. Louis Cardinals,Sportsman's Park IV,404959,103,102,STL,SLN,SLN +1926,AL,BOS,BOS,,8,154,77,46,107,,,N,N,562,5185,1325,249,54,32,465,450,48,51,,,835,714,4.7200000000,53,6,5,4086,1520,45,546,336,182,143,0.97,Boston Red Sox,Fenway Park I,285155,96,101,BOS,BOS,BOS +1926,AL,CHA,CHW,,5,155,79,81,72,,,N,N,730,5220,1508,314,60,32,556,381,121,77,,,665,573,3.7400000000,85,11,12,4140,1426,47,506,458,161,122,0.97,Chicago White Sox,Comiskey Park,710339,97,97,CHW,CHA,CHA +1926,AL,CLE,CLE,,2,154,80,88,66,,,N,N,738,5293,1529,333,49,27,455,332,88,43,,,612,519,3.4000000000,96,11,4,4122,1412,49,450,381,172,153,0.97,Cleveland Indians,League Park II,627426,101,101,CLE,CLE,CLE +1926,AL,DET,DET,,6,157,81,79,75,,,N,N,793,5315,1547,281,90,36,599,423,88,72,,,830,683,4.4100000000,57,10,18,4182,1570,58,555,469,197,151,0.96,Detroit Tigers,Navin Field,711914,101,100,DET,DET,DET +1926,AL,NYA,NYY,,1,155,75,91,63,,,Y,N,847,5221,1508,262,75,121,642,580,79,60,,,713,588,3.8600000000,63,4,20,4116,1442,56,478,486,209,117,0.96,New York Yankees,Yankee Stadium I,1027675,99,96,NYY,NYA,NYA +1926,AL,PHA,OAK,,3,150,71,83,67,,,N,N,677,5046,1359,259,65,61,523,452,56,46,,,570,449,3.0000000000,62,10,16,4038,1362,38,451,571,173,131,0.97,Philadelphia Athletics,Shibe Park,714508,106,104,PHA,PHA,PHA +1926,AL,SLA,BAL,,7,155,79,62,92,,,N,N,682,5259,1449,253,78,72,437,465,62,71,,,845,708,4.6600000000,64,5,9,4104,1549,86,654,337,228,167,0.96,St. Louis Browns,Sportsman's Park IV,283986,105,107,SLB,SLA,SLA +1926,AL,WS1,MIN,,4,152,74,81,69,,,N,N,802,5223,1525,244,97,43,555,369,122,89,,,761,650,4.3400000000,65,5,26,4044,1489,45,566,418,184,129,0.96,Washington Senators,Griffith Stadium I,551580,98,96,WSH,WS1,WS1 +1926,NL,BRO,LAD,,6,155,76,71,82,,,N,N,623,5130,1348,246,62,40,475,464,76,,,,705,578,3.8200000000,83,5,9,4083,1440,50,472,517,228,95,0.96,Brooklyn Robins,Ebbets Field,650819,98,100,BRO,BRO,BRO +1926,NL,BSN,ATL,,7,153,77,66,86,,,N,N,624,5216,1444,209,62,16,426,348,81,,,,719,608,4.0100000000,60,9,9,4095,1536,46,455,408,208,150,0.96,Boston Braves,Braves Field,303598,91,93,BSN,BSN,BSN +1926,NL,CHN,CHC,,4,155,78,82,72,,,N,N,682,5229,1453,291,49,66,445,447,85,,,,602,499,3.2600000000,77,13,14,4134,1407,39,486,508,162,174,0.97,Chicago Cubs,Wrigley Field,885063,102,101,CHC,CHN,CHN +1926,NL,CIN,CIN,,2,157,77,87,67,,,N,N,747,5320,1541,242,120,35,454,333,51,,,,651,535,3.4200000000,88,14,8,4224,1449,40,324,424,183,160,0.97,Cincinnati Reds,Crosley Field,672987,98,97,CIN,CIN,CIN +1926,NL,NY1,SFG,,5,151,76,74,77,,,N,N,663,5167,1435,214,58,73,339,420,94,,,,668,562,3.7700000000,61,4,15,4023,1370,70,427,419,186,150,0.97,New York Giants,Polo Grounds IV,700362,99,98,NYG,NY1,NY1 +1926,NL,PHI,PHI,,8,152,76,58,93,,,N,N,687,5254,1479,244,50,75,422,479,47,,,,900,746,5.0300000000,68,5,5,4002,1699,68,454,331,223,153,0.96,Philadelphia Phillies,Baker Bowl,240600,108,112,PHI,PHI,PHI +1926,NL,PIT,PIT,,3,157,79,84,69,,,N,N,769,5312,1514,243,106,44,434,350,91,,,,689,562,3.6700000000,83,12,18,4137,1422,50,455,387,220,161,0.96,Pittsburgh Pirates,Forbes Field,798542,105,102,PIT,PIT,PIT +1926,NL,SLN,STL,,1,156,79,89,65,,,Y,Y,817,5381,1541,259,82,90,478,518,83,,,,678,570,3.6700000000,90,10,6,4194,1423,76,397,365,198,141,0.96,St. Louis Cardinals,Sportsman's Park IV,668428,104,103,STL,SLN,SLN +1927,AL,BOS,BOS,,8,154,78,51,103,,,N,N,597,5207,1348,271,78,28,430,456,82,46,,,856,716,4.7200000000,63,6,7,4098,1603,56,558,381,222,162,0.96,Boston Red Sox,Fenway Park I,305275,98,102,BOS,BOS,BOS +1927,AL,CHA,CHW,,5,153,75,70,83,,,N,N,662,5157,1433,285,61,36,493,389,90,75,,,708,594,3.9100000000,85,10,8,4101,1467,55,440,365,180,131,0.97,Chicago White Sox,Comiskey Park,614423,98,98,CHW,CHA,CHA +1927,AL,CLE,CLE,,6,153,77,66,87,,,N,N,668,5202,1471,321,52,26,381,366,63,72,,,766,642,4.2700000000,72,5,8,4059,1542,37,508,366,202,146,0.96,Cleveland Indians,League Park II,373138,101,102,CLE,CLE,CLE +1927,AL,DET,DET,,4,156,78,82,71,,,N,N,845,5299,1533,282,100,51,587,420,141,73,,,805,638,4.1400000000,75,5,17,4161,1542,52,577,421,209,173,0.96,Detroit Tigers,Navin Field,773716,101,102,DET,DET,DET +1927,AL,NYA,NYY,,1,155,77,110,44,,,Y,Y,975,5347,1644,291,103,158,635,605,90,64,,,599,494,3.2000000000,82,11,20,4167,1403,42,409,431,196,123,0.96,New York Yankees,Yankee Stadium I,1164015,98,94,NYY,NYA,NYA +1927,AL,PHA,OAK,,2,155,77,91,63,,,N,N,841,5296,1606,281,70,56,551,326,98,63,,,726,610,3.9700000000,66,8,25,4152,1467,65,442,553,194,124,0.96,Philadelphia Athletics,Shibe Park,605529,105,102,PHA,PHA,PHA +1927,AL,SLA,BAL,,7,155,78,59,94,,,N,N,724,5220,1440,262,59,55,443,420,91,66,,,904,744,4.9500000000,80,4,8,4059,1592,79,604,385,248,166,0.96,St. Louis Browns,Sportsman's Park IV,247879,103,105,SLB,SLA,SLA +1927,AL,WS1,MIN,,3,157,79,85,69,,,N,N,782,5389,1549,268,87,29,498,359,133,52,,,730,618,3.9700000000,62,10,23,4206,1434,53,491,497,194,125,0.96,Washington Senators,Griffith Stadium I,528976,99,98,WSH,WS1,WS1 +1927,NL,BRO,LAD,,6,154,74,65,88,,,N,N,541,5193,1314,195,74,39,368,494,106,,,,619,513,3.3600000000,74,7,10,4125,1382,63,418,574,226,117,0.96,Brooklyn Robins,Ebbets Field,637230,100,100,BRO,BRO,BRO +1927,NL,BSN,ATL,,7,155,74,60,94,,,N,N,651,5370,1498,216,61,37,346,363,100,,,,771,652,4.2200000000,52,3,11,4170,1602,43,468,402,231,130,0.96,Boston Braves,Braves Field,288685,92,94,BSN,BSN,BSN +1927,NL,CHN,CHC,,4,153,78,85,68,,,N,N,750,5303,1505,266,63,74,481,492,65,,,,661,562,3.6500000000,75,11,5,4155,1439,50,514,465,181,152,0.97,Chicago Cubs,Wrigley Field,1159168,101,99,CHC,CHN,CHN +1927,NL,CIN,CIN,,5,153,80,75,78,,,N,N,643,5185,1439,222,77,29,402,332,62,,,,653,538,3.5400000000,87,12,12,4104,1472,36,316,407,165,160,0.97,Cincinnati Reds,Crosley Field,442164,97,97,CIN,CIN,CIN +1927,NL,NY1,SFG,,3,155,74,92,62,,,N,N,817,5372,1594,251,62,109,461,462,73,,,,720,609,3.9700000000,65,7,16,4143,1520,77,453,442,195,160,0.96,New York Giants,Polo Grounds IV,858190,99,98,NYG,NY1,NY1 +1927,NL,PHI,PHI,,8,155,78,51,103,,,N,N,678,5317,1487,216,46,57,434,482,68,,,,903,807,5.3600000000,81,5,6,4065,1710,84,462,377,168,152,0.97,Philadelphia Phillies,Baker Bowl,305420,95,99,PHI,PHI,PHI +1927,NL,PIT,PIT,,1,156,79,94,60,,,Y,N,817,5397,1648,258,78,54,437,355,65,,,,659,563,3.6600000000,90,10,10,4155,1400,58,418,435,187,130,0.96,Pittsburgh Pirates,Forbes Field,869720,107,105,PIT,PIT,PIT +1927,NL,SLN,STL,,2,153,80,92,61,,,N,N,754,5207,1450,264,79,84,484,511,110,,,,665,542,3.5700000000,89,14,11,4101,1416,72,363,394,213,170,0.96,St. Louis Cardinals,Sportsman's Park IV,749340,105,102,STL,SLN,SLN +1928,AL,BOS,BOS,,8,154,74,57,96,,,N,N,589,5132,1356,260,62,38,389,512,99,64,,,770,659,4.3900000000,70,5,9,4056,1492,49,452,407,172,139,0.97,Boston Red Sox,Fenway Park I,396920,96,100,BOS,BOS,BOS +1928,AL,CHA,CHW,,5,155,78,72,82,,,N,N,656,5207,1405,231,77,24,469,488,139,82,,,725,609,3.9800000000,88,6,11,4134,1518,66,501,418,184,149,0.97,Chicago White Sox,Comiskey Park,494152,98,100,CHW,CHA,CHA +1928,AL,CLE,CLE,,7,155,77,62,92,,,N,N,674,5386,1535,299,61,34,377,426,50,52,,,830,684,4.4700000000,71,4,15,4134,1615,52,511,416,221,187,0.96,Cleveland Indians,League Park II,375907,101,102,CLE,CLE,CLE +1928,AL,DET,DET,,6,154,77,68,86,,,N,N,744,5292,1476,265,97,62,469,438,113,77,,,804,659,4.3200000000,65,5,16,4116,1481,58,567,451,212,140,0.96,Detroit Tigers,Navin Field,474323,102,102,DET,DET,DET +1928,AL,NYA,NYY,,1,154,77,101,53,,,Y,Y,894,5337,1578,269,79,133,562,544,51,51,,,685,571,3.7400000000,82,13,21,4125,1466,59,452,487,199,136,0.96,New York Yankees,Yankee Stadium I,1072132,98,94,NYY,NYA,NYA +1928,AL,PHA,OAK,,2,153,77,98,55,,,N,N,829,5226,1540,323,75,89,533,442,59,48,,,615,510,3.3600000000,81,15,16,4101,1349,66,424,607,183,124,0.97,Philadelphia Athletics,Shibe Park,689756,103,99,PHA,PHA,PHA +1928,AL,SLA,BAL,,3,154,77,82,72,,,N,N,772,5217,1431,276,76,63,548,479,76,43,,,742,637,4.1700000000,80,6,15,4122,1487,93,454,456,184,146,0.97,St. Louis Browns,Sportsman's Park IV,339497,103,104,SLB,SLA,SLA +1928,AL,WS1,MIN,,4,155,80,75,79,,,N,N,718,5320,1510,277,93,40,481,390,110,59,,,705,597,3.8800000000,77,15,10,4152,1420,40,466,462,180,146,0.97,Washington Senators,Griffith Stadium I,378501,99,99,WSH,WS1,WS1 +1928,NL,BRO,LAD,,6,155,77,77,76,,,N,N,665,5243,1393,229,70,66,557,510,81,,,,640,504,3.2500000000,75,16,15,4188,1378,59,468,551,217,113,0.96,Brooklyn Robins,Ebbets Field,664863,99,100,BRO,BRO,BRO +1928,NL,BSN,ATL,,7,153,76,50,103,,,N,N,631,5228,1439,241,41,52,447,377,60,,,,878,730,4.8300000000,54,1,6,4080,1596,100,524,343,193,141,0.96,Boston Braves,Braves Field,227001,94,97,BSN,BSN,BSN +1928,NL,CHN,CHC,,3,154,77,91,63,,,N,N,714,5260,1460,251,64,92,508,517,83,,,,615,521,3.4000000000,75,12,14,4140,1383,56,508,531,156,176,0.97,Chicago Cubs,Wrigley Field,1143740,99,97,CHC,CHN,CHN +1928,NL,CIN,CIN,,5,153,78,78,74,,,N,N,648,5184,1449,229,67,32,386,330,83,,,,686,600,3.9400000000,68,11,11,4113,1516,58,410,355,162,194,0.97,Cincinnati Reds,Crosley Field,490490,98,99,CIN,CIN,CIN +1928,NL,NY1,SFG,,2,155,77,93,61,,,N,N,807,5459,1600,276,59,118,444,376,62,,,,653,568,3.6700000000,79,7,16,4182,1454,77,405,399,178,175,0.97,New York Giants,Polo Grounds IV,916191,100,98,NYG,NY1,NY1 +1928,NL,PHI,PHI,,8,152,75,43,109,,,N,N,660,5234,1396,257,47,85,503,510,53,,,,957,835,5.5600000000,42,4,11,4056,1660,108,675,404,179,171,0.97,Philadelphia Phillies,Baker Bowl,182168,106,110,PHI,PHI,PHI +1928,NL,PIT,PIT,,4,152,77,85,67,,,N,N,837,5371,1659,246,100,52,435,352,64,,,,704,594,3.9500000000,82,8,11,4062,1422,66,446,385,201,123,0.96,Pittsburgh Pirates,Forbes Field,495070,104,102,PIT,PIT,PIT +1928,NL,SLN,STL,,1,154,77,95,59,,,Y,N,807,5357,1505,292,70,113,568,438,82,,,,636,531,3.3800000000,83,4,21,4245,1470,86,399,422,152,134,0.97,St. Louis Cardinals,Sportsman's Park IV,761574,103,102,STL,SLN,SLN +1929,AL,BOS,BOS,,8,155,78,58,96,,,N,N,605,5160,1377,285,69,28,413,494,85,80,,,803,672,4.4300000000,84,9,5,4098,1537,78,496,416,218,159,0.96,Boston Red Sox,Fenway Park I,394620,97,100,BOS,BOS,BOS +1929,AL,CHA,CHW,,7,152,76,59,93,,,N,N,627,5248,1406,240,74,37,425,436,109,65,,,792,665,4.4100000000,78,5,7,4071,1481,84,505,328,190,153,0.96,Chicago White Sox,Comiskey Park,426795,98,100,CHW,CHA,CHA +1929,AL,CLE,CLE,,3,152,76,81,71,,,N,N,717,5187,1525,294,79,62,453,363,75,85,,,736,608,4.0500000000,80,8,10,4056,1570,56,488,389,198,162,0.96,Cleveland Indians,League Park II,536210,103,105,CLE,CLE,CLE +1929,AL,DET,DET,,6,155,77,70,84,,,N,N,926,5592,1671,339,97,110,521,496,95,72,,,928,766,4.9600000000,82,5,9,4170,1641,73,646,467,242,149,0.96,Detroit Tigers,Navin Field,869318,101,101,DET,DET,DET +1929,AL,NYA,NYY,,2,154,77,88,66,,,N,N,899,5379,1587,262,74,142,554,518,51,44,,,775,636,4.1900000000,64,12,18,4098,1475,83,485,484,179,152,0.97,New York Yankees,Yankee Stadium I,960148,94,92,NYY,NYA,NYA +1929,AL,PHA,OAK,,1,151,74,104,46,,,Y,Y,901,5204,1539,288,76,122,543,440,61,38,,,615,519,3.4400000000,70,9,24,4071,1371,73,487,573,148,117,0.97,Philadelphia Athletics,Shibe Park,839176,104,100,PHA,PHA,PHA +1929,AL,SLA,BAL,,4,154,77,79,73,,,N,N,733,5174,1426,277,64,46,589,431,72,46,,,713,622,4.0800000000,83,15,10,4113,1469,100,462,415,156,148,0.97,St. Louis Browns,Sportsman's Park IV,280697,104,104,SLB,SLA,SLA +1929,AL,WS1,MIN,,5,153,78,71,81,,,N,N,730,5237,1445,244,66,48,556,400,86,61,,,776,653,4.3400000000,62,3,17,4062,1429,48,496,494,191,156,0.96,Washington Senators,Griffith Stadium I,355506,101,100,WSH,WS1,WS1 +1929,NL,BRO,LAD,,6,153,77,70,83,,,N,N,755,5273,1535,282,69,99,504,454,80,,,,888,742,4.9200000000,59,8,16,4074,1553,92,549,549,192,113,0.96,Brooklyn Robins,Ebbets Field,731886,98,98,BRO,BRO,BRO +1929,NL,BSN,ATL,,8,154,77,56,98,,,N,N,657,5291,1481,252,77,33,408,432,65,,,,876,769,5.1200000000,78,4,12,4056,1604,103,530,366,204,146,0.96,Boston Braves,Braves Field,372351,95,98,BSN,BSN,BSN +1929,NL,CHN,CHC,,1,156,78,98,54,,,Y,N,982,5471,1655,310,46,139,589,567,103,,,,758,646,4.1600000000,79,14,21,4194,1542,77,537,548,154,169,0.97,Chicago Cubs,Wrigley Field,1485166,100,97,CHC,CHN,CHN +1929,NL,CIN,CIN,,7,155,78,66,88,,,N,N,686,5269,1478,258,79,34,412,347,134,,,,760,671,4.4100000000,75,5,8,4107,1558,61,413,347,162,148,0.97,Cincinnati Reds,Crosley Field,295040,95,97,CIN,CIN,CIN +1929,NL,NY1,SFG,,3,152,77,84,67,,,N,N,897,5388,1594,251,47,136,482,405,85,,,,709,605,3.9700000000,68,9,13,4116,1536,102,387,431,158,163,0.97,New York Giants,Polo Grounds IV,868806,100,97,NYG,NY1,NY1 +1929,NL,PHI,PHI,,5,154,76,71,82,,,N,N,897,5484,1693,305,51,153,573,470,59,,,,1032,918,6.1300000000,45,5,24,4044,1743,122,616,369,189,153,0.96,Philadelphia Phillies,Baker Bowl,281200,106,110,PHI,PHI,PHI +1929,NL,PIT,PIT,,2,154,76,88,65,,,N,N,904,5490,1663,285,116,60,503,335,94,,,,780,668,4.3600000000,79,5,13,4137,1530,96,439,409,181,136,0.97,Pittsburgh Pirates,Forbes Field,491377,103,102,PIT,PIT,PIT +1929,NL,SLN,STL,,4,154,77,78,74,,,N,N,831,5364,1569,310,84,100,490,455,72,,,,806,704,4.6600000000,83,6,8,4077,1604,101,474,453,174,149,0.97,St. Louis Cardinals,Sportsman's Park IV,399887,103,101,STL,SLN,SLN +1930,AL,BOS,BOS,,8,154,76,52,102,,,N,N,612,5286,1393,257,68,47,358,552,42,35,,,814,707,4.6800000000,78,4,5,4080,1515,75,488,356,194,161,0.96,Boston Red Sox,Fenway Park I,444045,96,99,BOS,BOS,BOS +1930,AL,CHA,CHW,,7,154,78,62,92,,,N,N,729,5419,1496,256,90,63,389,479,74,40,,,884,712,4.7100000000,63,2,10,4083,1629,74,407,471,233,136,0.96,Chicago White Sox,Comiskey Park,406123,96,99,CHW,CHA,CHA +1930,AL,CLE,CLE,,4,154,77,81,73,,,N,N,890,5439,1654,358,59,72,490,461,51,47,,,915,737,4.8800000000,68,5,14,4080,1663,85,528,441,235,156,0.96,Cleveland Indians,League Park II,528657,103,103,CLE,CLE,CLE +1930,AL,DET,DET,,5,154,78,75,79,,,N,N,783,5297,1504,298,90,82,461,508,98,70,,,833,706,4.7000000000,68,4,17,4053,1507,86,570,574,188,156,0.96,Detroit Tigers,Navin Field,649450,102,104,DET,DET,DET +1930,AL,NYA,NYY,,3,154,76,86,68,,,N,N,1062,5448,1683,298,110,152,644,569,91,60,,,898,741,4.8800000000,65,7,15,4101,1566,93,524,572,208,132,0.96,New York Yankees,Yankee Stadium I,1169230,96,93,NYY,NYA,NYA +1930,AL,PHA,OAK,,1,154,76,102,52,,,Y,Y,951,5345,1573,319,74,125,599,531,48,33,,,751,652,4.2800000000,72,8,21,4113,1457,84,488,672,145,121,0.97,Philadelphia Athletics,Shibe Park,721663,105,101,PHA,PHA,PHA +1930,AL,SLA,BAL,,6,154,78,64,90,,,N,N,751,5278,1415,289,67,75,497,550,93,71,,,886,772,5.0700000000,68,5,10,4113,1639,124,449,470,189,152,0.96,St. Louis Browns,Sportsman's Park IV,152088,103,104,SLB,SLA,SLA +1930,AL,WS1,MIN,,2,154,77,94,60,,,N,N,892,5370,1620,300,98,57,537,438,101,67,,,689,602,3.9600000000,78,6,14,4107,1367,52,504,524,155,150,0.97,Washington Senators,Griffith Stadium I,614474,101,99,WSH,WS1,WS1 +1930,NL,BRO,LAD,,4,154,77,86,68,,,N,N,871,5433,1654,303,73,122,481,541,53,,,,738,614,4.0300000000,74,13,15,4116,1480,115,394,526,169,167,0.97,Brooklyn Robins,Ebbets Field,1097329,99,99,BRO,BRO,BRO +1930,NL,BSN,ATL,,6,154,77,70,84,,,N,N,693,5356,1503,246,78,66,332,397,69,,,,835,743,4.9100000000,71,6,11,4083,1624,117,475,424,178,167,0.97,Boston Braves,Braves Field,464835,97,99,BSN,BSN,BSN +1930,NL,CHN,CHC,,2,156,79,90,64,,,N,N,998,5581,1722,305,72,171,588,635,70,,,,870,748,4.8000000000,67,6,12,4209,1642,111,528,601,170,167,0.97,Chicago Cubs,Wrigley Field,1463624,101,98,CHC,CHN,CHN +1930,NL,CIN,CIN,,7,154,77,59,95,,,N,N,665,5245,1475,265,67,74,445,489,48,,,,857,754,5.0800000000,61,6,11,4005,1650,75,394,361,161,164,0.97,Cincinnati Reds,Crosley Field,386727,94,97,CIN,CIN,CIN +1930,NL,NY1,SFG,,3,154,77,87,67,,,N,N,959,5553,1769,264,83,143,422,382,59,,,,814,698,4.6100000000,64,6,19,4089,1546,117,439,522,164,164,0.97,New York Giants,Polo Grounds IV,868714,98,95,NYG,NY1,NY1 +1930,NL,PHI,PHI,,8,156,77,52,102,,,N,N,944,5667,1783,345,44,126,450,459,34,,,,1199,1023,6.7100000000,54,3,7,4116,1993,142,543,384,239,169,0.96,Philadelphia Phillies,Baker Bowl,299007,107,110,PHI,PHI,PHI +1930,NL,PIT,PIT,,5,154,77,80,74,,,N,N,891,5346,1622,285,119,86,494,449,76,,,,928,792,5.2400000000,80,7,13,4083,1730,128,438,393,216,164,0.96,Pittsburgh Pirates,Forbes Field,357795,100,100,PIT,PIT,PIT +1930,NL,SLN,STL,,1,154,77,92,62,,,Y,N,1004,5512,1732,373,89,104,479,496,72,,,,784,673,4.3900000000,63,5,21,4140,1596,87,476,639,183,176,0.97,St. Louis Cardinals,Sportsman's Park IV,508501,104,102,STL,SLN,SLN +1931,AL,BOS,BOS,,6,153,80,62,90,,,N,N,625,5379,1409,289,34,37,405,565,42,43,,,800,698,4.6000000000,61,5,10,4098,1559,54,473,365,187,127,0.97,Boston Red Sox,Fenway Park I,350975,94,98,BOS,BOS,BOS +1931,AL,CHA,CHW,,8,156,77,56,97,,,N,N,704,5481,1423,238,69,27,483,445,94,39,,,939,778,5.0400000000,54,6,10,4170,1613,82,588,421,246,131,0.96,Chicago White Sox,Comiskey Park,403550,94,97,CHW,CHA,CHA +1931,AL,CLE,CLE,,4,155,76,78,76,,,N,N,885,5445,1612,321,69,71,555,433,63,60,,,833,697,4.6300000000,76,6,9,4062,1577,64,561,470,231,143,0.96,Cleveland Indians,League Park II,483027,105,105,CLE,CLE,CLE +1931,AL,DET,DET,,7,154,77,61,93,,,N,N,651,5430,1456,292,69,43,480,468,117,75,,,836,706,4.5900000000,86,5,6,4152,1549,79,597,511,221,139,0.96,Detroit Tigers,Navin Field,434056,103,104,DET,DET,DET +1931,AL,NYA,NYY,,2,155,77,94,59,,,N,N,1067,5608,1667,277,78,155,748,554,138,68,,,760,658,4.2000000000,78,4,17,4230,1461,67,543,686,167,131,0.97,New York Yankees,Yankee Stadium I,912437,95,91,NYY,NYA,NYA +1931,AL,PHA,OAK,,1,153,75,107,45,,,Y,N,858,5377,1544,311,64,118,528,543,25,23,,,626,526,3.4700000000,97,12,16,4095,1342,73,457,574,140,151,0.97,Philadelphia Athletics,Shibe Park,627464,106,103,PHA,PHA,PHA +1931,AL,SLA,BAL,,5,154,77,63,91,,,N,N,722,5374,1455,287,62,76,488,580,73,80,,,870,720,4.7600000000,65,4,10,4086,1623,84,444,436,231,160,0.96,St. Louis Browns,Sportsman's Park IV,179126,103,105,SLB,SLA,SLA +1931,AL,WS1,MIN,,3,156,79,92,62,,,N,N,843,5576,1588,308,93,49,481,459,72,64,,,691,582,3.7600000000,60,7,24,4182,1434,73,498,582,142,148,0.97,Washington Senators,Griffith Stadium I,492657,101,98,WSH,WS1,WS1 +1931,NL,BRO,LAD,,4,153,76,79,73,,,N,N,681,5309,1464,240,77,71,409,512,45,,,,673,579,3.8400000000,64,9,18,4068,1520,56,351,546,187,154,0.96,Brooklyn Robins,Ebbets Field,753133,100,99,BRO,BRO,BRO +1931,NL,BSN,ATL,,7,156,78,64,90,,,N,N,533,5296,1367,221,59,34,368,430,46,,,,680,598,3.9000000000,78,12,9,4140,1465,66,406,419,167,141,0.97,Boston Braves,Braves Field,515005,97,99,BSN,BSN,BSN +1931,NL,CHN,CHC,,3,156,77,84,70,,,N,N,828,5451,1578,340,66,84,577,641,49,,,,710,611,3.9700000000,80,8,8,4155,1448,54,524,541,169,141,0.97,Chicago Cubs,Wrigley Field,1086422,102,100,CHC,CHN,CHN +1931,NL,CIN,CIN,,8,154,77,58,96,,,N,N,592,5343,1439,241,70,21,403,463,24,,,,742,631,4.2200000000,70,7,6,4035,1545,51,399,317,165,194,0.97,Cincinnati Reds,Crosley Field,263316,93,96,CIN,CIN,CIN +1931,NL,NY1,SFG,,2,153,78,87,65,,,N,N,768,5372,1554,251,64,101,383,395,83,,,,599,499,3.3000000000,90,17,12,4080,1341,71,422,570,159,126,0.97,New York Giants,Polo Grounds IV,812163,97,95,NYG,NY1,NY1 +1931,NL,PHI,PHI,,6,155,76,66,88,,,N,N,684,5375,1502,299,52,81,437,492,42,,,,828,692,4.5800000000,60,6,16,4080,1603,75,511,499,204,149,0.96,Philadelphia Phillies,Baker Bowl,284849,108,110,PHI,PHI,PHI +1931,NL,PIT,PIT,,5,155,78,75,79,,,N,N,636,5360,1425,243,70,41,493,454,59,,,,691,565,3.6600000000,89,9,5,4170,1489,55,442,345,193,167,0.96,Pittsburgh Pirates,Forbes Field,260392,98,99,PIT,PIT,PIT +1931,NL,SLN,STL,,1,154,78,101,53,,,Y,Y,815,5435,1554,353,74,60,432,475,114,,,,614,531,3.4500000000,80,17,20,4152,1470,65,449,626,160,169,0.97,St. Louis Cardinals,Sportsman's Park IV,608535,105,103,STL,SLN,SLN +1932,AL,BOS,BOS,,8,154,77,43,111,,,N,N,566,5295,1331,253,57,53,469,539,46,46,,,915,760,5.0200000000,42,3,7,4086,1574,79,612,365,231,165,0.96,Boston Red Sox,Fenway Park I,182150,95,99,BOS,BOS,BOS +1932,AL,CHA,CHW,,7,152,77,49,102,,,N,N,667,5336,1426,274,56,36,459,386,89,58,,,897,722,4.8200000000,50,2,12,4044,1551,88,580,379,267,170,0.95,Chicago White Sox,Comiskey Park,233198,93,96,CHW,CHA,CHA +1932,AL,CLE,CLE,,4,153,77,87,65,,,N,N,845,5412,1544,310,74,78,566,454,52,54,,,747,630,4.1200000000,94,6,8,4131,1506,70,446,439,189,129,0.96,Cleveland Indians,League Park II/Cleveland Stadium,468953,109,107,CLE,CLE,CLE +1932,AL,DET,DET,,5,153,78,76,75,,,N,N,799,5409,1479,291,80,80,486,523,103,49,,,787,651,4.3000000000,67,9,17,4086,1421,89,592,521,186,154,0.96,Detroit Tigers,Navin Field,397157,104,105,DET,DET,DET +1932,AL,NYA,NYY,,1,156,77,107,47,,,Y,Y,1002,5477,1564,279,82,160,766,527,77,66,,,724,623,3.9800000000,96,11,15,4224,1425,93,561,780,190,124,0.96,New York Yankees,Yankee Stadium I,962320,96,92,NYY,NYA,NYA +1932,AL,PHA,OAK,,2,154,77,94,60,,,N,N,981,5537,1606,303,52,172,647,630,38,23,,,752,685,4.4500000000,95,10,10,4158,1477,112,511,595,123,142,0.98,Philadelphia Athletics,Shibe Park,405500,104,101,PHA,PHA,PHA +1932,AL,SLA,BAL,,6,154,75,63,91,,,N,N,736,5449,1502,274,69,67,507,528,69,62,,,898,766,5.0100000000,63,7,11,4128,1592,103,574,496,187,156,0.96,St. Louis Browns,Sportsman's Park IV,112558,105,108,SLB,SLA,SLA +1932,AL,WS1,MIN,,3,154,77,93,61,,,N,N,840,5515,1565,303,100,61,505,442,70,47,,,716,639,4.1600000000,66,11,22,4149,1463,73,526,437,125,157,0.97,Washington Senators,Griffith Stadium I,371396,99,96,WSH,WS1,WS1 +1932,NL,BRO,LAD,,3,154,78,81,73,,,N,N,752,5433,1538,296,59,110,388,574,61,,,,747,654,4.2700000000,61,7,16,4137,1538,72,403,497,182,169,0.97,Brooklyn Dodgers,Ebbets Field,681827,98,98,BRO,BRO,BRO +1932,NL,BSN,ATL,,5,155,77,77,77,,,N,N,649,5506,1460,262,53,63,347,496,36,,,,655,555,3.5300000000,72,8,8,4242,1483,61,420,440,152,145,0.97,Boston Braves,Braves Field,507606,96,97,BSN,BSN,BSN +1932,NL,CHN,CHC,,1,154,77,90,64,,,Y,N,720,5462,1519,296,60,69,398,514,48,,,,633,535,3.4400000000,79,9,7,4203,1444,68,409,527,173,146,0.97,Chicago Cubs,Wrigley Field,974688,100,98,CHC,CHN,CHN +1932,NL,CIN,CIN,,8,155,77,60,94,,,N,N,575,5443,1429,265,68,47,436,436,35,,,,715,587,3.7900000000,83,6,6,4182,1505,69,276,359,178,129,0.97,Cincinnati Reds,Crosley Field,356950,96,99,CIN,CIN,CIN +1932,NL,NY1,SFG,,6,154,77,72,82,,,N,N,755,5530,1527,263,54,116,348,391,31,,,,706,585,3.8300000000,57,3,16,4125,1533,112,387,506,191,143,0.96,New York Giants,Polo Grounds IV,484868,98,96,NYG,NY1,NY1 +1932,NL,PHI,PHI,,4,154,77,78,76,,,N,N,844,5510,1608,330,67,122,446,547,71,,,,796,687,4.4700000000,59,4,17,4152,1589,107,450,459,194,133,0.96,Philadelphia Phillies,Baker Bowl,268914,112,114,PHI,PHI,PHI +1932,NL,PIT,PIT,,2,154,76,86,68,,,N,N,701,5421,1543,274,90,48,358,385,71,,,,711,574,3.7500000000,71,12,12,4131,1472,86,338,377,185,124,0.96,Pittsburgh Pirates,Forbes Field,287262,97,97,PIT,PIT,PIT +1932,NL,SLN,STL,,6,156,79,72,82,,,N,N,684,5458,1467,307,51,76,420,514,92,,,,717,616,3.9700000000,70,13,9,4188,1533,76,455,681,168,155,0.97,St. Louis Cardinals,Sportsman's Park IV,279219,104,102,STL,SLN,SLN +1933,AL,BOS,BOS,,7,149,72,63,86,,,N,N,700,5201,1407,294,56,50,525,464,58,37,,,758,641,4.3500000000,60,4,14,3981,1396,75,591,467,206,133,0.96,Boston Red Sox,Fenway Park I,268715,103,103,BOS,BOS,BOS +1933,AL,CHA,CHW,,6,151,77,67,83,,,N,N,683,5318,1448,231,53,43,538,416,43,46,,,814,678,4.4500000000,53,8,13,4113,1505,85,519,423,186,143,0.97,Chicago White Sox,Comiskey Park,397789,95,98,CHW,CHA,CHA +1933,AL,CLE,CLE,,4,151,77,75,76,,,N,N,654,5240,1366,218,77,50,448,426,36,40,,,669,556,3.7100000000,74,12,7,4050,1382,60,465,437,157,127,0.97,Cleveland Indians,League Park II/Cleveland Stadium,387936,106,106,CLE,CLE,CLE +1933,AL,DET,DET,,5,155,78,75,79,,,N,N,722,5502,1479,283,78,57,475,523,68,50,,,733,614,3.9500000000,69,6,17,4194,1415,84,561,575,178,167,0.97,Detroit Tigers,Navin Field,320972,102,101,DET,DET,DET +1933,AL,NYA,NYY,,2,152,75,91,59,,,N,N,927,5274,1495,241,75,144,700,506,76,59,,,768,656,4.3600000000,70,8,22,4062,1426,66,612,711,164,122,0.97,New York Yankees,Yankee Stadium I,728014,95,91,NYY,NYA,NYA +1933,AL,PHA,OAK,,3,152,76,79,72,,,N,N,875,5330,1519,298,56,139,625,618,34,34,,,853,718,4.8100000000,69,6,14,4029,1523,77,644,423,203,121,0.96,Philadelphia Athletics,Shibe Park,297138,101,100,PHA,PHA,PHA +1933,AL,SLA,BAL,,8,153,77,55,96,,,N,N,669,5285,1337,244,64,64,520,556,72,60,,,820,728,4.8200000000,55,7,10,4080,1574,96,531,426,150,162,0.97,St. Louis Browns,Sportsman's Park IV,88113,106,108,SLB,SLA,SLA +1933,AL,WS1,MIN,,1,153,76,99,53,,,Y,N,850,5524,1586,281,86,60,539,395,65,50,,,665,590,3.8200000000,68,5,26,4167,1415,64,452,447,133,149,0.97,Washington Senators,Griffith Stadium I,437533,99,98,WSH,WS1,WS1 +1933,NL,BRO,LAD,,6,157,80,65,88,,,N,N,617,5367,1413,224,51,62,397,453,82,,,,695,574,3.7300000000,71,9,10,4158,1502,51,374,415,177,120,0.97,Brooklyn Dodgers,Ebbets Field,526815,96,96,BRO,BRO,BRO +1933,NL,BSN,ATL,,4,156,77,83,71,,,N,N,552,5243,1320,217,56,54,326,428,25,,,,531,461,2.9600000000,85,15,16,4209,1391,54,355,383,130,148,0.97,Boston Braves,Braves Field,517803,92,92,BSN,BSN,BSN +1933,NL,CHN,CHC,,3,154,79,86,68,,,N,N,646,5255,1422,256,51,72,392,475,52,,,,536,443,2.9300000000,95,16,9,4086,1316,51,413,488,168,163,0.97,Chicago Cubs,Wrigley Field,594112,100,99,CHC,CHN,CHN +1933,NL,CIN,CIN,,8,153,79,58,94,,,N,N,496,5156,1267,208,37,34,349,354,30,,,,643,514,3.4200000000,74,13,8,4056,1470,47,257,310,177,139,0.97,Cincinnati Reds,Crosley Field,218281,97,101,CIN,CIN,CIN +1933,NL,NY1,SFG,,1,156,77,91,61,,,Y,Y,636,5461,1437,204,41,82,377,477,31,,,,515,424,2.7100000000,75,23,15,4224,1280,61,400,555,178,156,0.97,New York Giants,Polo Grounds IV,604471,99,97,NYG,NY1,NY1 +1933,NL,PHI,PHI,,7,152,72,60,92,,,N,N,607,5261,1439,240,41,60,381,479,55,,,,760,644,4.3400000000,52,10,13,4008,1563,87,410,341,183,156,0.97,Philadelphia Phillies,Baker Bowl,156421,112,114,PHI,PHI,PHI +1933,NL,PIT,PIT,,2,154,77,87,67,,,N,N,667,5429,1548,249,84,39,366,334,34,,,,619,499,3.2700000000,70,16,12,4119,1417,54,313,401,166,133,0.97,Pittsburgh Pirates,Forbes Field,288747,100,99,PIT,PIT,PIT +1933,NL,SLN,STL,,5,154,77,82,71,,,N,N,687,5387,1486,256,61,57,391,528,99,,,,609,517,3.3700000000,73,11,16,4146,1391,55,452,635,160,119,0.97,St. Louis Cardinals,Sportsman's Park IV,256171,106,105,STL,SLN,SLN +1934,AL,BOS,BOS,,4,153,77,76,76,,,N,N,820,5339,1465,287,70,51,610,535,116,47,,,775,653,4.3200000000,68,9,9,4083,1527,70,543,538,189,141,0.96,Boston Red Sox,Fenway Park II,610640,105,105,BOS,BOS,BOS +1934,AL,CHA,CHW,,8,153,75,53,99,,,N,N,704,5301,1395,237,40,71,565,524,36,27,,,946,815,5.4100000000,72,5,8,4065,1599,139,628,506,207,126,0.96,Chicago White Sox,Comiskey Park,236559,103,105,CHW,CHA,CHA +1934,AL,CLE,CLE,,3,154,78,85,69,,,N,N,814,5396,1550,340,46,100,526,433,52,32,,,763,650,4.2800000000,72,8,19,4101,1476,70,582,554,170,164,0.97,Cleveland Indians,League Park II/Cleveland Stadium,391338,101,100,CLE,CLE,CLE +1934,AL,DET,DET,,1,154,80,101,53,,,Y,N,958,5475,1644,349,53,74,639,528,125,55,,,708,618,4.0600000000,74,13,14,4110,1467,86,488,640,156,150,0.97,Detroit Tigers,Navin Field,919161,100,98,DET,DET,DET +1934,AL,NYA,NYY,,2,154,77,94,60,,,N,N,842,5368,1494,226,61,135,700,597,71,46,,,669,577,3.7600000000,83,13,10,4146,1349,71,542,656,160,151,0.97,New York Yankees,Yankee Stadium I,854682,94,91,NYY,NYA,NYA +1934,AL,PHA,OAK,,5,153,76,68,82,,,N,N,764,5317,1491,236,50,144,491,584,57,35,,,838,744,5.0100000000,68,8,8,4011,1429,84,693,480,196,166,0.96,Philadelphia Athletics,Shibe Park,305847,96,98,PHA,PHA,PHA +1934,AL,SLA,BAL,,6,154,76,67,85,,,N,N,674,5288,1417,252,59,62,514,631,43,31,,,800,674,4.4900000000,50,6,20,4050,1499,94,632,499,187,160,0.96,St. Louis Browns,Sportsman's Park IV,115305,107,110,SLB,SLA,SLA +1934,AL,WS1,MIN,,7,155,76,66,86,,,N,N,729,5448,1512,278,70,51,570,447,47,42,,,806,718,4.6800000000,61,4,12,4143,1622,74,503,412,161,167,0.97,Washington Senators,Griffith Stadium I,330074,96,96,WSH,WS1,WS1 +1934,NL,BRO,LAD,,6,153,77,71,81,,,N,N,748,5427,1526,284,52,79,548,555,55,,,,795,674,4.4800000000,66,6,12,4062,1540,81,475,520,180,141,0.97,Brooklyn Dodgers,Ebbets Field,434188,95,96,BRO,BRO,BRO +1934,NL,BSN,ATL,,4,152,75,78,73,,,N,N,683,5370,1460,233,44,83,375,440,30,,,,714,621,4.1100000000,62,12,20,4077,1512,78,405,462,169,120,0.97,Boston Braves,Braves Field,303205,92,94,BSN,BSN,BSN +1934,NL,CHN,CHC,,3,152,77,86,65,,,N,N,705,5347,1494,263,44,101,375,630,59,,,,639,569,3.7600000000,73,11,9,4083,1432,80,417,633,137,135,0.97,Chicago Cubs,Wrigley Field,707525,99,96,CHC,CHN,CHN +1934,NL,CIN,CIN,,8,152,78,52,99,,,N,N,590,5361,1428,227,65,55,313,532,34,,,,801,654,4.3700000000,51,3,19,4041,1645,61,389,438,181,136,0.97,Cincinnati Reds,Crosley Field,206773,96,100,CIN,CIN,CIN +1934,NL,NY1,SFG,,2,153,75,93,60,,,N,N,760,5396,1485,240,41,126,406,526,19,,,,583,486,3.1900000000,68,13,30,4110,1384,75,351,499,179,141,0.97,New York Giants,Polo Grounds IV,730851,98,96,NYG,NY1,NY1 +1934,NL,PHI,PHI,,7,149,71,56,93,,,N,N,675,5218,1480,286,35,56,398,534,52,,,,794,686,4.7600000000,52,8,15,3891,1501,126,437,416,197,140,0.96,Philadelphia Phillies,Baker Bowl,169885,113,116,PHI,PHI,PHI +1934,NL,PIT,PIT,,5,151,78,74,76,,,N,N,735,5361,1541,281,77,52,440,398,44,,,,713,620,4.2000000000,63,8,8,3987,1523,78,354,487,145,118,0.97,Pittsburgh Pirates,Forbes Field,322622,103,102,PIT,PIT,PIT +1934,NL,SLN,STL,,1,154,77,95,58,,,Y,Y,799,5502,1582,294,75,104,392,535,69,,,,656,568,3.6900000000,78,15,16,4158,1463,77,411,689,166,141,0.97,St. Louis Cardinals,Sportsman's Park IV,325056,107,104,STL,SLN,SLN +1935,AL,BOS,BOS,,4,154,79,78,75,,,N,N,718,5288,1458,281,63,69,609,470,91,59,,,732,619,4.0500000000,82,6,11,4128,1520,67,520,470,190,136,0.96,Boston Red Sox,Fenway Park II,558568,107,106,BOS,BOS,BOS +1935,AL,CHA,CHW,,5,153,77,74,78,,,N,N,738,5314,1460,262,42,74,580,405,46,28,,,750,662,4.3800000000,80,8,8,4080,1443,105,574,436,145,133,0.97,Chicago White Sox,Comiskey Park,470281,102,103,CHW,CHA,CHA +1935,AL,CLE,CLE,,3,156,77,82,71,,,N,N,776,5534,1573,324,77,93,460,567,63,54,,,739,644,4.1500000000,67,12,21,4188,1527,68,457,498,174,147,0.97,Cleveland Indians,League Park II/Cleveland Stadium,397615,102,102,CLE,CLE,CLE +1935,AL,DET,DET,,1,152,79,93,58,,,Y,Y,919,5423,1573,301,83,106,627,456,70,45,,,665,579,3.8200000000,87,16,11,4092,1440,78,522,584,126,154,0.97,Detroit Tigers,Navin Field,1034929,96,93,DET,DET,DET +1935,AL,NYA,NYY,,2,149,74,89,60,,,N,N,818,5214,1462,255,70,104,604,469,68,46,,,632,532,3.6000000000,76,12,13,3993,1276,91,516,594,151,114,0.97,New York Yankees,Yankee Stadium I,657508,95,91,NYY,NYA,NYA +1935,AL,PHA,OAK,,8,149,72,58,91,,,N,N,710,5269,1470,243,44,112,475,602,43,35,,,869,754,5.1200000000,58,7,10,3978,1486,73,704,469,189,150,0.96,Philadelphia Athletics,Shibe Park,233173,99,102,PHA,PHA,PHA +1935,AL,SLA,BAL,,7,155,76,65,87,,,N,N,718,5365,1446,291,51,73,593,561,45,25,,,930,807,5.2600000000,42,4,15,4140,1667,92,641,435,186,138,0.97,St. Louis Browns,Sportsman's Park IV,80922,104,107,SLB,SLA,SLA +1935,AL,WS1,MIN,,6,154,77,67,86,,,N,N,823,5592,1591,255,95,32,596,406,54,37,,,903,804,5.2500000000,67,5,12,4134,1672,89,613,456,171,186,0.97,Washington Senators,Griffith Stadium I,255011,97,98,WSH,WS1,WS1 +1935,NL,BRO,LAD,,5,154,77,70,83,,,N,N,711,5410,1496,235,62,59,430,520,60,,,,767,637,4.2200000000,62,11,20,4074,1519,88,436,480,188,146,0.96,Brooklyn Dodgers,Ebbets Field,470517,98,99,BRO,BRO,BRO +1935,NL,BSN,ATL,,8,153,75,38,115,,,N,N,575,5309,1396,233,33,75,353,436,20,,,,852,729,4.9300000000,54,6,5,3990,1645,81,404,355,197,101,0.96,Boston Braves,Braves Field,232754,92,94,BSN,BSN,BSN +1935,NL,CHN,CHC,,1,154,77,100,54,,,Y,N,847,5486,1581,303,62,88,464,471,66,,,,597,505,3.2600000000,81,12,14,4182,1417,85,400,589,186,163,0.97,Chicago Cubs,Wrigley Field,692604,101,98,CHC,CHN,CHN +1935,NL,CIN,CIN,,6,154,76,68,85,,,N,N,646,5296,1403,244,68,73,392,547,72,,,,772,648,4.3000000000,59,9,13,4068,1490,65,438,500,204,139,0.96,Cincinnati Reds,Crosley Field,448247,96,98,CIN,CIN,CIN +1935,NL,NY1,SFG,,3,156,79,91,62,,,N,N,770,5623,1608,248,56,123,392,479,32,,,,675,589,3.7800000000,76,10,11,4209,1433,106,411,524,174,129,0.97,New York Giants,Polo Grounds IV,748748,99,96,NYG,NY1,NY1 +1935,NL,PHI,PHI,,7,156,79,64,89,,,N,N,685,5442,1466,249,32,92,392,661,52,,,,871,727,4.7600000000,53,8,15,4122,1652,106,505,475,228,145,0.96,Philadelphia Phillies,Baker Bowl,205470,110,113,PHI,PHI,PHI +1935,NL,PIT,PIT,,4,153,77,86,67,,,N,N,743,5415,1543,255,90,66,457,437,30,,,,647,519,3.4200000000,76,15,11,4095,1428,63,312,549,190,94,0.96,Pittsburgh Pirates,Forbes Field,352885,103,102,PIT,PIT,PIT +1935,NL,SLN,STL,,2,154,77,96,58,,,N,N,829,5457,1548,286,59,86,404,521,71,,,,625,541,3.5200000000,73,10,18,4152,1445,68,377,602,163,133,0.97,St. Louis Cardinals,Sportsman's Park IV,506084,104,102,STL,SLN,SLN +1936,AL,BOS,BOS,,6,155,77,74,80,,,N,N,775,5383,1485,288,62,86,584,465,55,44,,,764,669,4.3900000000,78,11,9,4116,1501,78,552,584,162,139,0.97,Boston Red Sox,Fenway Park II,626895,106,106,BOS,BOS,BOS +1936,AL,CHA,CHW,,4,153,75,81,70,,,N,N,920,5466,1597,282,56,60,684,417,66,29,,,873,767,5.0600000000,80,5,8,4095,1603,104,578,414,168,174,0.97,Chicago White Sox,Comiskey Park,440810,104,103,CHW,CHA,CHA +1936,AL,CLE,CLE,,5,157,81,80,74,,,N,N,921,5646,1715,357,82,123,514,470,66,53,,,862,745,4.8300000000,74,6,12,4167,1604,73,607,619,182,154,0.97,Cleveland Indians,League Park II/Cleveland Stadium,500391,103,102,CLE,CLE,CLE +1936,AL,DET,DET,,2,154,77,83,71,,,N,N,921,5464,1638,326,55,94,640,462,73,49,,,871,756,5.0000000000,76,13,13,4080,1568,100,562,526,154,159,0.97,Detroit Tigers,Navin Field,875948,100,98,DET,DET,DET +1936,AL,NYA,NYY,,1,155,77,102,51,,,Y,Y,1065,5591,1676,315,83,182,700,594,77,40,,,731,649,4.1700000000,77,6,21,4200,1474,84,663,624,163,148,0.97,New York Yankees,Yankee Stadium I,976913,97,93,NYY,NYA,NYA +1936,AL,PHA,OAK,,8,154,77,53,100,,,N,N,714,5373,1443,240,60,72,524,590,59,43,,,1045,913,6.0800000000,68,3,12,4056,1645,131,696,405,208,152,0.96,Philadelphia Athletics,Shibe Park,285173,97,101,PHA,PHA,PHA +1936,AL,SLA,BAL,,7,155,77,57,95,,,N,N,804,5391,1502,299,66,79,625,627,62,20,,,1064,935,6.2400000000,54,3,13,4044,1776,115,609,399,188,143,0.96,St. Louis Browns,Sportsman's Park IV,93267,102,106,SLB,SLA,SLA +1936,AL,WS1,MIN,,3,153,77,82,71,,,N,N,889,5433,1601,293,84,62,576,398,104,42,,,799,684,4.5800000000,78,8,14,4035,1484,73,588,462,182,163,0.97,Washington Senators,Griffith Stadium I,379525,94,95,WSH,WS1,WS1 +1936,NL,BRO,LAD,,7,156,79,67,87,,,N,N,662,5574,1518,263,43,33,390,458,55,,,,752,620,3.9800000000,59,7,18,4209,1466,84,528,651,202,107,0.96,Brooklyn Dodgers,Ebbets Field,489618,101,103,BRO,BRO,BRO +1936,NL,BSN,ATL,,6,157,79,71,83,,,N,N,631,5478,1450,207,45,67,433,582,23,,,,715,619,3.9400000000,61,7,13,4239,1566,69,451,421,189,175,0.97,Boston Bees,Braves Field,340585,93,95,BSN,BSN,BSN +1936,NL,CHN,CHC,,2,154,77,87,67,,,N,N,755,5409,1545,275,36,76,491,462,68,,,,603,544,3.5400000000,77,18,10,4146,1413,77,434,597,146,156,0.97,Chicago Cubs,Wrigley Field,699370,103,99,CHC,CHN,CHN +1936,NL,CIN,CIN,,5,154,76,74,80,,,N,N,722,5393,1476,224,73,82,410,584,68,,,,760,641,4.2200000000,50,6,23,4101,1576,51,418,459,191,150,0.96,Cincinnati Reds,Crosley Field,466345,93,95,CIN,CIN,CIN +1936,NL,NY1,SFG,,1,154,78,92,62,,,Y,N,742,5449,1529,237,48,97,431,452,31,,,,621,532,3.4600000000,60,12,22,4155,1458,75,401,500,168,164,0.97,New York Giants,Polo Grounds IV,837952,100,97,NYG,NY1,NY1 +1936,NL,PHI,PHI,,8,154,78,54,100,,,N,N,726,5465,1538,250,46,103,451,586,50,,,,874,704,4.6400000000,51,7,14,4095,1630,87,515,454,237,144,0.95,Philadelphia Phillies,Baker Bowl,249219,111,114,PHI,PHI,PHI +1936,NL,PIT,PIT,,4,156,76,84,70,,,N,N,804,5586,1596,283,80,60,517,502,37,,,,718,603,3.8900000000,67,5,12,4185,1475,74,379,559,199,113,0.96,Pittsburgh Pirates,Forbes Field,372524,102,101,PIT,PIT,PIT +1936,NL,SLN,STL,,2,155,77,87,67,,,N,N,795,5537,1554,332,60,88,442,577,69,,,,794,694,4.4700000000,65,5,24,4194,1610,89,434,559,154,134,0.97,St. Louis Cardinals,Sportsman's Park IV,448078,99,98,STL,SLN,SLN +1937,AL,BOS,BOS,,5,154,74,80,72,,,N,N,821,5354,1506,269,64,100,601,557,79,61,,,775,680,4.4800000000,74,6,14,4098,1518,92,597,682,175,139,0.97,Boston Red Sox,Fenway Park II,559659,104,103,BOS,BOS,BOS +1937,AL,CHA,CHW,,3,154,77,86,68,,,N,N,780,5277,1478,280,76,67,549,447,70,34,,,730,626,4.1700000000,70,15,21,4053,1435,115,532,533,174,173,0.97,Chicago White Sox,Comiskey Park,589245,100,100,CHW,CHA,CHA +1937,AL,CLE,CLE,,4,156,78,83,71,,,N,N,817,5353,1499,304,76,103,570,551,78,51,,,768,665,4.3900000000,64,4,15,4092,1529,61,566,630,157,153,0.97,Cleveland Indians,League Park II/Cleveland Stadium,564849,98,97,CLE,CLE,CLE +1937,AL,DET,DET,,2,155,77,89,65,,,N,N,935,5516,1611,309,62,150,656,711,89,45,,,841,746,4.8700000000,70,6,11,4134,1521,102,635,485,147,149,0.97,Detroit Tigers,Navin Field,1072276,102,101,DET,DET,DET +1937,AL,NYA,NYY,,1,157,79,102,52,,,Y,Y,979,5487,1554,282,73,174,709,607,60,36,,,671,566,3.6500000000,82,15,21,4188,1417,92,506,652,169,134,0.97,New York Yankees,Yankee Stadium I,998148,102,97,NYY,NYA,NYA +1937,AL,PHA,OAK,,7,154,79,54,97,,,N,N,699,5228,1398,278,60,94,583,557,95,48,,,854,719,4.8500000000,65,6,9,4005,1490,105,613,469,198,150,0.96,Philadelphia Athletics,Shibe Park,430738,98,101,PHA,PHA,PHA +1937,AL,SLA,BAL,,8,156,78,46,108,,,N,N,715,5510,1573,327,44,71,514,510,30,27,,,1023,909,6.0000000000,55,2,8,4089,1768,143,653,468,174,166,0.97,St. Louis Browns,Sportsman's Park IV,123121,100,104,SLB,SLA,SLA +1937,AL,WS1,MIN,,6,158,80,73,80,,,N,N,757,5578,1559,245,84,47,591,503,61,35,,,841,711,4.5800000000,75,5,14,4194,1498,96,671,524,170,181,0.97,Washington Senators,Griffith Stadium I,397799,95,96,WSH,WS1,WS1 +1937,NL,BRO,LAD,,6,155,76,62,91,,,N,N,616,5295,1401,258,53,37,469,583,69,,,,772,625,4.1300000000,63,5,8,4086,1470,68,476,592,216,127,0.96,Brooklyn Dodgers,Ebbets Field,482481,102,104,BRO,BRO,BRO +1937,NL,BSN,ATL,,5,152,76,79,73,,,N,N,579,5124,1265,200,41,63,485,707,45,,,,556,486,3.2200000000,85,16,10,4077,1344,60,372,387,157,128,0.97,Boston Bees,Braves Field,385339,91,91,BSN,BSN,BSN +1937,NL,CHN,CHC,,2,154,78,93,61,,,N,N,811,5349,1537,253,74,96,538,496,71,,,,682,609,3.9700000000,73,11,13,4143,1434,91,502,596,151,141,0.97,Chicago Cubs,Wrigley Field,895020,104,102,CHC,CHN,CHN +1937,NL,CIN,CIN,,8,155,80,56,98,,,N,N,612,5230,1329,215,59,73,437,586,53,,,,707,595,3.9400000000,64,10,18,4074,1428,38,533,581,208,139,0.96,Cincinnati Reds,Crosley Field,411221,95,95,CIN,CIN,CIN +1937,NL,NY1,SFG,,1,152,75,95,57,,,Y,N,732,5329,1484,251,41,111,412,492,45,,,,602,519,3.4300000000,67,11,17,4083,1341,85,404,653,159,143,0.97,New York Giants,Polo Grounds IV,926887,102,100,NYG,NY1,NY1 +1937,NL,PHI,PHI,,7,155,74,61,92,,,N,N,724,5424,1482,258,37,103,478,640,66,,,,869,770,5.0500000000,59,6,15,4119,1629,116,501,529,184,157,0.97,Philadelphia Phillies,Baker Bowl,212790,109,112,PHI,PHI,PHI +1937,NL,PIT,PIT,,3,154,78,86,68,,,N,N,704,5433,1550,223,86,47,463,480,32,,,,646,540,3.5600000000,67,12,17,4098,1398,71,428,643,181,135,0.97,Pittsburgh Pirates,Forbes Field,459679,100,98,PIT,PIT,PIT +1937,NL,SLN,STL,,4,157,80,81,73,,,N,N,789,5476,1543,264,67,94,385,569,78,,,,733,616,3.9800000000,81,10,4,4176,1546,95,448,571,164,127,0.97,St. Louis Cardinals,Sportsman's Park IV,430811,102,101,STL,SLN,SLN +1938,AL,BOS,BOS,,2,150,75,88,61,,,N,N,902,5229,1566,298,56,98,650,463,55,51,,,751,652,4.4600000000,67,10,15,3948,1472,102,528,484,187,172,0.96,Boston Red Sox,Fenway Park II,646459,105,103,BOS,BOS,BOS +1938,AL,CHA,CHW,,6,149,73,65,83,,,N,N,709,5199,1439,239,55,67,514,489,56,39,,,752,638,4.3600000000,83,5,9,3948,1449,101,550,432,195,155,0.96,Chicago White Sox,Comiskey Park,338278,103,103,CHW,CHA,CHA +1938,AL,CLE,CLE,,3,153,76,86,66,,,N,N,847,5356,1506,300,89,113,550,605,83,36,,,782,692,4.6000000000,68,5,17,4059,1416,100,681,717,152,145,0.97,Cleveland Indians,League Park II/Cleveland Stadium,652006,98,97,CLE,CLE,CLE +1938,AL,DET,DET,,4,155,79,84,70,,,N,N,862,5270,1434,219,52,137,693,581,76,41,,,795,717,4.7900000000,75,3,11,4044,1532,110,608,435,147,172,0.97,Detroit Tigers,Briggs Stadium,799557,107,106,DET,DET,DET +1938,AL,NYA,NYY,,1,157,79,99,53,,,Y,Y,966,5410,1480,283,63,174,749,616,91,28,,,710,600,3.9100000000,91,11,13,4146,1436,85,566,567,169,169,0.97,New York Yankees,Yankee Stadium I,970916,100,95,NYY,NYA,NYA +1938,AL,PHA,OAK,,8,154,76,53,99,,,N,N,726,5229,1410,243,62,98,605,590,65,53,,,956,806,5.4800000000,56,4,12,3972,1573,142,599,473,204,119,0.96,Philadelphia Athletics,Shibe Park,385357,96,100,PHA,PHA,PHA +1938,AL,SLA,BAL,,7,156,77,55,97,,,N,N,755,5333,1498,273,36,92,590,528,51,40,,,962,866,5.8000000000,71,3,7,4032,1584,132,737,632,145,163,0.97,St. Louis Browns,Sportsman's Park IV,130417,99,104,SLB,SLA,SLA +1938,AL,WS1,MIN,,5,152,78,75,76,,,N,N,814,5474,1602,278,72,85,573,379,65,37,,,873,746,4.9400000000,59,6,11,4080,1472,92,655,515,179,179,0.97,Washington Senators,Griffith Stadium I,522694,93,94,WSH,WS1,WS1 +1938,NL,BRO,LAD,,7,151,74,69,80,,,N,N,704,5142,1322,225,79,61,611,615,66,,,,710,602,4.0700000000,56,12,14,3996,1464,88,446,469,157,148,0.97,Brooklyn Dodgers,Ebbets Field,663087,103,104,BRO,BRO,BRO +1938,NL,BSN,ATL,,5,153,75,77,75,,,N,N,561,5250,1311,199,39,54,424,548,49,,,,618,521,3.4000000000,83,15,12,4140,1375,66,465,413,173,136,0.97,Boston Bees,Braves Field,341149,89,90,BSN,BSN,BSN +1938,NL,CHN,CHC,,1,154,77,89,63,,,Y,N,713,5333,1435,242,70,65,522,476,49,,,,598,523,3.3700000000,67,16,18,4188,1414,71,454,583,135,151,0.97,Chicago Cubs,Wrigley Field,951640,103,101,CHC,CHN,CHN +1938,NL,CIN,CIN,,4,151,77,82,68,,,N,N,723,5391,1495,251,57,110,366,518,19,,,,634,548,3.6200000000,72,11,16,4086,1329,75,463,542,169,133,0.97,Cincinnati Reds,Crosley Field,706756,98,97,CIN,CIN,CIN +1938,NL,NY1,SFG,,3,152,73,83,67,,,N,N,705,5255,1424,210,36,125,465,528,31,,,,637,543,3.6200000000,59,8,18,4047,1370,87,389,497,168,147,0.97,New York Giants,Polo Grounds IV,799633,101,100,NYG,NY1,NY1 +1938,NL,PHI,PHI,,8,151,75,45,105,,,N,N,550,5192,1318,233,29,40,423,507,38,,,,840,728,4.9300000000,68,3,6,3987,1516,76,582,492,201,135,0.96,Philadelphia Phillies,Baker Bowl/Shibe Park,166111,99,105,PHI,PHI,PHI +1938,NL,PIT,PIT,,2,152,78,86,64,,,N,N,707,5422,1511,265,66,65,485,409,47,,,,630,530,3.4600000000,57,8,15,4137,1406,71,432,557,163,168,0.97,Pittsburgh Pirates,Forbes Field,641033,100,100,PIT,PIT,PIT +1938,NL,SLN,STL,,6,156,81,71,80,,,N,N,725,5528,1542,288,74,91,412,492,55,,,,721,591,3.8400000000,58,10,16,4152,1482,77,474,534,199,145,0.96,St. Louis Cardinals,Sportsman's Park IV,291418,105,104,STL,SLN,SLN +1939,AL,BOS,BOS,,2,152,75,89,62,,,N,N,890,5308,1543,287,57,124,591,505,42,44,,,795,684,4.5600000000,52,4,20,4050,1533,77,543,539,179,147,0.97,Boston Red Sox,Fenway Park II,573070,104,102,BOS,BOS,BOS +1939,AL,CHA,CHW,,4,155,77,85,69,,,N,N,755,5279,1451,220,56,64,579,502,113,61,,,737,659,4.3100000000,62,5,21,4131,1470,99,454,535,167,140,0.97,Chicago White Sox,Comiskey Park,594104,103,103,CHW,CHA,CHA +1939,AL,CLE,CLE,,3,154,77,87,67,,,N,N,797,5316,1490,291,79,85,557,574,72,46,,,700,618,4.0800000000,69,10,13,4092,1394,75,602,614,180,148,0.97,Cleveland Indians,League Park II/Cleveland Stadium,563926,97,96,CLE,CLE,CLE +1939,AL,DET,DET,,5,155,78,81,73,,,N,N,849,5326,1487,277,67,124,620,592,88,38,,,762,652,4.2900000000,64,8,16,4101,1430,104,574,633,198,147,0.96,Detroit Tigers,Briggs Stadium,836279,107,106,DET,DET,DET +1939,AL,NYA,NYY,,1,152,77,106,45,,,Y,Y,967,5300,1521,259,55,166,701,543,72,37,,,556,496,3.3100000000,87,15,26,4044,1208,85,567,565,126,159,0.97,New York Yankees,Yankee Stadium I,859785,99,95,NYY,NYA,NYA +1939,AL,PHA,OAK,,7,153,76,55,97,,,N,N,711,5309,1438,282,55,98,503,532,60,34,,,1022,863,5.7900000000,50,6,12,4026,1687,148,579,397,210,131,0.96,Philadelphia Athletics,Shibe Park,395022,97,101,PHA,PHA,PHA +1939,AL,SLA,BAL,,8,156,78,43,111,,,N,N,733,5422,1453,242,50,91,559,606,48,38,,,1035,916,6.0100000000,56,3,3,4113,1724,133,739,516,199,144,0.96,St. Louis Browns,Sportsman's Park IV,109159,102,105,SLB,SLA,SLA +1939,AL,WS1,MIN,,6,153,77,65,87,,,N,N,702,5334,1483,249,79,44,547,460,94,47,,,797,692,4.6000000000,72,4,10,4062,1420,75,602,521,205,167,0.96,Washington Senators,Griffith Stadium I,339257,92,94,WSH,WS1,WS1 +1939,NL,BRO,LAD,,3,157,78,84,69,,,N,N,708,5350,1420,265,57,78,564,639,59,,,,645,570,3.6400000000,69,9,13,4230,1431,93,399,528,176,157,0.97,Brooklyn Dodgers,Ebbets Field,955668,105,104,BRO,BRO,BRO +1939,NL,BSN,ATL,,7,152,73,63,88,,,N,N,572,5286,1395,199,39,56,366,494,41,,,,659,560,3.7100000000,68,11,15,4074,1400,63,513,430,181,178,0.97,Boston Bees,Braves Field,285994,92,94,BSN,BSN,BSN +1939,NL,CHN,CHC,,4,156,80,84,70,,,N,N,724,5293,1407,263,62,91,523,553,61,,,,678,588,3.8000000000,72,8,13,4176,1504,74,430,584,186,126,0.97,Chicago Cubs,Wrigley Field,726663,102,100,CHC,CHN,CHN +1939,NL,CIN,CIN,,1,156,81,97,57,,,Y,N,767,5378,1493,269,60,98,500,538,46,,,,595,510,3.2700000000,86,13,9,4209,1340,81,499,637,159,170,0.97,Cincinnati Reds,Crosley Field,981443,102,99,CIN,CIN,CIN +1939,NL,NY1,SFG,,5,151,74,77,74,,,N,N,703,5129,1395,211,38,116,498,499,26,,,,685,596,4.0700000000,55,6,20,3957,1412,86,477,505,153,152,0.97,New York Giants,Polo Grounds IV,702457,101,101,NYG,NY1,NY1 +1939,NL,PHI,PHI,,8,152,74,45,106,,,N,N,553,5133,1341,232,40,49,421,486,47,,,,856,762,5.1700000000,67,3,12,3978,1502,106,579,447,171,133,0.97,Philadelphia Phillies,Shibe Park,277973,94,100,PHI,PHI,PHI +1939,NL,PIT,PIT,,6,153,77,68,85,,,N,N,666,5269,1453,261,60,63,477,420,44,,,,721,624,4.1500000000,53,10,15,4062,1537,70,423,464,168,153,0.97,Pittsburgh Pirates,Forbes Field,376734,98,98,PIT,PIT,PIT +1939,NL,SLN,STL,,2,155,79,92,61,,,N,N,779,5447,1601,332,62,98,475,566,44,,,,633,552,3.5900000000,45,18,32,4152,1377,76,498,603,177,140,0.97,St. Louis Cardinals,Sportsman's Park IV,400245,106,105,STL,SLN,SLN +1940,AL,BOS,BOS,,4,154,79,82,72,,,N,N,872,5481,1566,301,80,145,590,597,55,49,,,825,749,4.8900000000,51,4,16,4137,1568,124,625,613,173,156,0.97,Boston Red Sox,Fenway Park II,716234,104,102,BOS,BOS,BOS +1940,AL,CHA,CHW,,4,155,78,82,72,,,N,N,735,5386,1499,238,63,73,496,569,52,60,,,672,576,3.7400000000,83,10,18,4158,1335,111,480,574,185,125,0.96,Chicago White Sox,Comiskey Park,660336,102,101,CHW,CHA,CHA +1940,AL,CLE,CLE,,2,155,82,89,65,,,N,N,710,5361,1422,287,61,101,519,597,53,36,,,637,555,3.6300000000,72,13,22,4125,1328,86,512,686,148,164,0.97,Cleveland Indians,League Park II/Cleveland Stadium,902576,98,97,CLE,CLE,CLE +1940,AL,DET,DET,,1,155,79,90,64,,,Y,N,888,5418,1549,312,65,134,664,556,66,39,,,717,613,4.0100000000,59,10,23,4125,1425,102,570,752,194,116,0.96,Detroit Tigers,Briggs Stadium,1112693,109,108,DET,DET,DET +1940,AL,NYA,NYY,,3,155,76,88,66,,,N,N,817,5286,1371,243,66,155,648,606,59,36,,,671,593,3.8900000000,76,10,14,4119,1389,119,511,559,152,158,0.97,New York Yankees,Yankee Stadium I,988975,96,92,NYY,NYA,NYA +1940,AL,PHA,OAK,,8,154,71,54,100,,,N,N,703,5304,1391,242,53,105,556,656,48,33,,,932,780,5.2200000000,72,4,12,4035,1543,135,534,488,238,131,0.96,Philadelphia Athletics,Shibe Park,432145,97,101,PHA,PHA,PHA +1940,AL,SLA,BAL,,6,156,77,67,87,,,N,N,757,5416,1423,278,58,118,556,642,51,40,,,882,781,5.1200000000,64,4,9,4119,1592,113,646,439,158,179,0.97,St. Louis Browns,Sportsman's Park IV,239591,102,105,SLB,SLA,SLA +1940,AL,WS1,MIN,,7,154,77,64,90,,,N,N,665,5365,1453,266,67,52,468,504,94,40,,,811,688,4.5900000000,74,6,7,4050,1494,93,618,618,192,166,0.96,Washington Senators,Griffith Stadium I,381241,93,95,WSH,WS1,WS1 +1940,NL,BRO,LAD,,2,156,81,88,65,,,N,N,697,5470,1421,256,70,93,522,570,56,,,,621,557,3.5000000000,65,17,14,4299,1366,101,393,639,183,110,0.97,Brooklyn Dodgers,Ebbets Field,975978,108,105,BRO,BRO,BRO +1940,NL,BSN,ATL,,7,152,75,65,87,,,N,N,623,5329,1366,219,50,59,402,581,48,,,,745,658,4.3600000000,76,9,12,4077,1444,83,573,435,183,169,0.97,Boston Bees,Braves Field,241616,94,96,BSN,BSN,BSN +1940,NL,CHN,CHC,,5,154,77,75,79,,,N,N,681,5389,1441,272,48,86,482,566,63,,,,636,548,3.5400000000,69,12,14,4176,1418,74,430,564,199,143,0.96,Chicago Cubs,Wrigley Field,534878,98,97,CHC,CHN,CHN +1940,NL,CIN,CIN,,1,155,77,100,53,,,Y,Y,707,5372,1427,264,38,89,453,503,72,,,,528,477,3.0500000000,91,10,11,4221,1263,73,445,557,117,158,0.98,Cincinnati Reds,Crosley Field,850180,102,99,CIN,CIN,CIN +1940,NL,NY1,SFG,,6,152,76,72,80,,,N,N,663,5324,1423,201,46,91,453,478,45,,,,659,573,3.7900000000,57,11,18,4080,1383,110,473,606,139,132,0.97,New York Giants,Polo Grounds IV,747852,101,101,NYG,NY1,NY1 +1940,NL,PHI,PHI,,8,153,79,50,103,,,N,N,494,5137,1225,180,35,75,435,527,25,,,,750,663,4.4000000000,66,5,8,4071,1429,92,475,485,181,136,0.97,Philadelphia Phillies,Shibe Park,207177,95,101,PHI,PHI,PHI +1940,NL,PIT,PIT,,4,156,75,78,76,,,N,N,809,5466,1511,276,68,76,553,494,69,,,,783,672,4.3600000000,49,8,24,4164,1569,72,492,491,217,160,0.96,Pittsburgh Pirates,Forbes Field,507934,99,99,PIT,PIT,PIT +1940,NL,SLN,STL,,3,156,77,84,69,,,N,N,747,5499,1514,266,61,119,479,610,97,,,,699,594,3.8300000000,71,10,14,4188,1457,83,488,550,174,134,0.97,St. Louis Cardinals,Sportsman's Park IV,324078,106,103,STL,SLN,SLN +1941,AL,BOS,BOS,,2,155,77,84,70,,,N,N,865,5359,1517,304,55,124,683,567,67,51,,,750,639,4.1900000000,70,8,11,4116,1453,88,611,574,169,139,0.97,Boston Red Sox,Fenway Park II,718497,103,101,BOS,BOS,BOS +1941,AL,CHA,CHW,,3,156,79,77,77,,,N,N,638,5404,1376,245,47,47,510,476,91,53,,,649,554,3.5200000000,106,14,4,4248,1362,89,521,564,180,145,0.97,Chicago White Sox,Comiskey Park,677077,99,99,CHW,CHA,CHA +1941,AL,CLE,CLE,,4,155,77,75,79,,,N,N,677,5283,1350,249,84,103,512,605,63,47,,,668,597,3.9000000000,68,10,19,4131,1366,71,660,617,142,158,0.97,Cleveland Indians,League Park II/Cleveland Stadium,745948,95,95,CLE,CLE,CLE +1941,AL,DET,DET,,4,155,77,75,79,,,N,N,686,5370,1412,247,55,81,602,584,43,28,,,743,641,4.1800000000,52,8,16,4143,1399,80,645,697,186,129,0.96,Detroit Tigers,Briggs Stadium,684915,110,110,DET,DET,DET +1941,AL,NYA,NYY,,1,156,78,101,53,,,Y,Y,830,5444,1464,243,60,151,616,565,51,33,,,631,548,3.5300000000,75,13,26,4188,1309,81,598,589,165,196,0.97,New York Yankees,Yankee Stadium I,964722,99,95,NYY,NYA,NYA +1941,AL,PHA,OAK,,8,154,77,64,90,,,N,N,713,5336,1431,240,69,85,574,588,27,36,,,840,733,4.8300000000,64,3,18,4095,1516,136,557,386,200,150,0.96,Philadelphia Athletics,Shibe Park,528894,98,101,PHA,PHA,PHA +1941,AL,SLA,BAL,,6,157,79,70,84,,,N,N,765,5408,1440,281,58,91,775,552,50,39,,,823,728,4.7200000000,65,7,10,4167,1563,120,549,454,151,156,0.97,St. Louis Browns,Sportsman's Park IV,176240,104,104,SLB,SLA,SLA +1941,AL,WS1,MIN,,6,156,78,70,84,,,N,N,728,5521,1502,257,80,52,470,488,79,36,,,798,671,4.3500000000,69,8,7,4167,1524,69,603,544,188,169,0.96,Washington Senators,Griffith Stadium I,415663,95,97,WSH,WS1,WS1 +1941,NL,BRO,LAD,,1,157,79,100,54,,,Y,N,800,5485,1494,286,69,101,600,535,36,,,,581,496,3.1400000000,66,17,22,4263,1236,81,495,603,162,125,0.97,Brooklyn Dodgers,Ebbets Field,1214910,106,102,BRO,BRO,BRO +1941,NL,BSN,ATL,,7,156,76,62,92,,,N,N,592,5414,1357,231,38,48,471,608,61,,,,720,608,3.9500000000,62,10,9,4155,1440,75,554,446,190,174,0.97,Boston Braves,Braves Field,263680,94,97,BSN,BSN,BSN +1941,NL,CHN,CHC,,6,155,77,70,84,,,N,N,666,5230,1323,239,25,99,559,670,39,,,,670,564,3.7200000000,74,8,9,4092,1431,60,449,548,180,139,0.97,Chicago Cubs,Wrigley Field,545159,96,96,CHC,CHN,CHN +1941,NL,CIN,CIN,,3,154,79,88,66,,,N,N,616,5218,1288,213,33,64,477,428,68,,,,564,488,3.1700000000,89,19,10,4158,1300,61,510,627,150,147,0.97,Cincinnati Reds,Crosley Field,643513,101,99,CIN,CIN,CIN +1941,NL,NY1,SFG,,5,156,78,74,79,,,N,N,667,5395,1401,248,35,95,504,518,36,,,,706,609,3.9400000000,55,12,18,4173,1455,90,539,566,160,144,0.97,New York Giants,Polo Grounds IV,763098,103,102,NYG,NY1,NY1 +1941,NL,PHI,PHI,,8,155,76,43,111,,,N,N,501,5233,1277,188,38,64,451,596,65,,,,793,686,4.5000000000,35,4,9,4116,1499,79,606,552,186,147,0.96,Philadelphia Phillies,Shibe Park,231401,95,101,PHI,PHI,PHI +1941,NL,PIT,PIT,,4,156,78,81,73,,,N,N,690,5297,1417,233,65,56,547,516,59,,,,643,531,3.4800000000,71,8,12,4122,1392,66,492,410,194,130,0.96,Pittsburgh Pirates,Forbes Field,482241,100,100,PIT,PIT,PIT +1941,NL,SLN,STL,,2,155,79,97,56,,,N,N,734,5457,1482,254,56,70,540,543,47,,,,589,502,3.1900000000,64,15,20,4248,1289,85,502,659,171,146,0.97,St. Louis Cardinals,Sportsman's Park IV,633645,107,104,STL,SLN,SLN +1942,AL,BOS,BOS,,2,152,77,93,59,,,N,N,761,5248,1451,244,55,103,591,508,68,61,,,594,519,3.4400000000,84,11,17,4074,1260,65,553,500,157,156,0.97,Boston Red Sox,Fenway Park II,730340,104,102,BOS,BOS,BOS +1942,AL,CHA,CHW,,6,148,70,66,82,,,N,N,538,4949,1215,214,36,25,497,427,114,70,,,609,523,3.5800000000,86,8,8,3942,1304,74,473,432,173,144,0.97,Chicago White Sox,Comiskey Park,425734,97,98,CHW,CHA,CHA +1942,AL,CLE,CLE,,4,156,80,75,79,,,N,N,590,5317,1344,223,58,50,500,544,69,74,,,659,559,3.5900000000,61,12,11,4206,1353,61,560,448,163,175,0.97,Cleveland Indians,League Park II/Cleveland Stadium,459447,94,94,CLE,CLE,CLE +1942,AL,DET,DET,,5,156,77,73,81,,,N,N,589,5327,1313,217,37,76,509,476,39,40,,,587,487,3.1300000000,65,12,14,4197,1321,60,598,671,193,142,0.96,Detroit Tigers,Briggs Stadium,580087,108,108,DET,DET,DET +1942,AL,NYA,NYY,,1,154,77,103,51,,,Y,N,801,5305,1429,223,57,108,591,556,69,33,,,507,445,2.9100000000,88,18,17,4125,1259,71,431,558,142,190,0.97,New York Yankees,Yankee Stadium I,922011,98,94,NYY,NYA,NYA +1942,AL,PHA,OAK,,8,154,76,55,99,,,N,N,549,5285,1315,213,46,33,440,490,44,45,,,801,679,4.4500000000,67,5,9,4122,1404,89,639,546,188,124,0.96,Philadelphia Athletics,Shibe Park,423487,100,104,PHA,PHA,PHA +1942,AL,SLA,BAL,,3,151,77,82,69,,,N,N,730,5229,1354,239,62,98,609,607,37,38,,,637,544,3.5900000000,68,12,13,4089,1387,63,505,488,167,143,0.97,St. Louis Browns,Sportsman's Park IV,255617,102,102,SLB,SLA,SLA +1942,AL,WS1,MIN,,7,151,77,62,89,,,N,N,653,5295,1364,224,49,40,581,536,98,29,,,817,685,4.5800000000,68,12,11,4038,1496,50,558,496,222,133,0.96,Washington Senators,Griffith Stadium I,403493,99,100,WSH,WS1,WS1 +1942,NL,BRO,LAD,,2,155,79,104,50,,,N,N,742,5285,1398,263,34,62,572,484,81,,,,510,441,2.8400000000,67,16,24,4194,1205,73,493,612,138,150,0.97,Brooklyn Dodgers,Ebbets Field,1037765,103,99,BRO,BRO,BRO +1942,NL,BSN,ATL,,7,150,71,59,89,,,N,N,515,5077,1216,210,19,68,474,507,49,,,,645,557,3.7600000000,68,9,8,4002,1326,82,518,414,139,138,0.97,Boston Braves,Braves Field,285332,97,100,BSN,BSN,BSN +1942,NL,CHN,CHC,,6,155,78,68,86,,,N,N,591,5352,1360,224,41,75,509,607,63,,,,665,560,3.6000000000,71,10,14,4200,1447,70,525,507,169,169,0.97,Chicago Cubs,Wrigley Field,590972,96,96,CHC,CHN,CHN +1942,NL,CIN,CIN,,4,154,77,76,76,,,N,N,527,5260,1216,198,39,66,483,549,42,,,,545,442,2.8200000000,80,12,8,4233,1213,47,526,616,175,158,0.97,Cincinnati Reds,Crosley Field,427031,100,99,CIN,CIN,CIN +1942,NL,NY1,SFG,,3,154,79,85,67,,,N,N,675,5210,1323,162,35,109,558,511,39,,,,600,504,3.3100000000,70,12,13,4110,1299,94,493,497,137,128,0.97,New York Giants,Polo Grounds IV,779621,101,102,NYG,NY1,NY1 +1942,NL,PHI,PHI,,8,151,74,42,109,,,N,N,394,5060,1174,168,37,44,392,488,37,,,,706,614,4.1200000000,51,2,6,4023,1328,61,605,472,193,147,0.96,Philadelphia Phillies,Shibe Park,230183,94,99,PHI,PHI,PHI +1942,NL,PIT,PIT,,5,151,77,66,81,,,N,N,585,5104,1250,173,49,54,537,536,41,,,,631,537,3.5800000000,64,13,11,4053,1376,62,435,426,182,129,0.96,Pittsburgh Pirates,Forbes Field,448897,103,102,PIT,PIT,PIT +1942,NL,SLN,STL,,1,156,78,106,48,,,Y,Y,755,5421,1454,282,69,60,551,507,71,,,,482,399,2.5500000000,70,18,15,4230,1192,49,473,651,169,137,0.97,St. Louis Cardinals,Sportsman's Park IV,553552,108,104,STL,SLN,SLN +1943,AL,BOS,BOS,,7,155,77,68,84,,,N,N,563,5392,1314,223,42,57,486,591,86,61,,,607,547,3.4500000000,62,13,16,4278,1369,61,615,513,153,179,0.97,Boston Red Sox,Fenway Park II,358275,102,101,BOS,BOS,BOS +1943,AL,CHA,CHW,,4,155,76,82,72,,,N,N,573,5254,1297,193,46,33,561,581,173,87,,,594,498,3.2000000000,70,12,19,4200,1352,54,501,476,166,167,0.97,Chicago White Sox,Comiskey Park,508962,99,101,CHW,CHA,CHA +1943,AL,CLE,CLE,,3,153,77,82,71,,,N,N,600,5269,1344,246,45,55,567,521,47,58,,,577,492,3.1500000000,64,14,20,4218,1234,52,606,585,157,183,0.97,Cleveland Indians,League Park II/Cleveland Stadium,438894,93,94,CLE,CLE,CLE +1943,AL,DET,DET,,5,155,78,78,76,,,N,N,632,5364,1401,200,47,77,483,553,40,43,,,560,470,3.0000000000,67,18,20,4233,1226,51,549,706,177,130,0.97,Detroit Tigers,Briggs Stadium,606287,107,106,DET,DET,DET +1943,AL,NYA,NYY,,1,155,77,98,56,,,Y,Y,669,5282,1350,218,59,100,624,562,46,60,,,542,461,2.9300000000,83,14,13,4245,1229,60,489,653,160,166,0.97,New York Yankees,Yankee Stadium I,618330,101,98,NYY,NYA,NYA +1943,AL,PHA,OAK,,8,155,79,49,105,,,N,N,497,5244,1219,174,44,26,430,465,55,42,,,717,627,4.0500000000,73,5,13,4182,1421,73,536,503,162,148,0.97,Philadelphia Athletics,Shibe Park,376735,99,103,PHA,PHA,PHA +1943,AL,SLA,BAL,,6,153,77,72,80,,,N,N,596,5175,1269,229,36,78,569,646,37,43,,,604,525,3.4100000000,64,10,14,4155,1397,74,488,572,152,127,0.97,St. Louis Browns,Sportsman's Park IV,214392,104,102,SLB,SLA,SLA +1943,AL,WS1,MIN,,2,153,76,84,69,,,N,N,666,5233,1328,245,50,47,605,579,142,55,,,595,490,3.1800000000,61,16,21,4164,1293,48,540,495,179,145,0.97,Washington Senators,Griffith Stadium I,574694,96,97,WSH,WS1,WS1 +1943,NL,BRO,LAD,,3,153,77,81,72,,,N,N,716,5309,1444,263,35,39,580,422,58,,,,674,590,3.8800000000,50,13,22,4107,1326,59,637,588,167,137,0.97,Brooklyn Dodgers,Ebbets Field,661739,101,100,BRO,BRO,BRO +1943,NL,BSN,ATL,,6,153,77,68,85,,,N,N,465,5196,1213,202,36,39,469,609,56,,,,612,504,3.2500000000,87,13,4,4191,1361,66,441,409,178,139,0.97,Boston Braves,Braves Field,271289,98,100,BSN,BSN,BSN +1943,NL,CHN,CHC,,5,154,75,74,79,,,N,N,632,5279,1380,207,56,52,574,522,53,,,,600,510,3.3100000000,67,13,14,4158,1379,53,394,513,167,138,0.97,Chicago Cubs,Wrigley Field,508247,98,98,CHC,CHN,CHN +1943,NL,CIN,CIN,,2,155,78,87,67,,,N,N,608,5329,1362,229,47,43,445,476,49,,,,543,488,3.1300000000,78,18,17,4212,1299,38,579,498,121,193,0.98,Cincinnati Reds,Crosley Field,379122,99,99,CIN,CIN,CIN +1943,NL,NY1,SFG,,8,156,77,55,98,,,N,N,558,5290,1309,153,33,81,480,470,35,,,,713,632,4.0800000000,35,6,19,4182,1474,80,626,588,167,140,0.97,New York Giants,Polo Grounds IV,466095,100,101,NYG,NY1,NY1 +1943,NL,PHI,PHI,,7,157,78,64,90,,,N,N,571,5297,1321,186,36,66,499,556,29,,,,676,586,3.7900000000,66,10,14,4176,1436,59,451,431,187,143,0.97,Philadelphia Blue Jays,Shibe Park,466975,95,99,PHI,PHI,PHI +1943,NL,PIT,PIT,,4,157,78,80,74,,,N,N,669,5353,1401,240,73,42,573,566,64,,,,605,480,3.0800000000,74,11,12,4212,1424,44,422,396,170,159,0.97,Pittsburgh Pirates,Forbes Field,498740,104,103,PIT,PIT,PIT +1943,NL,SLN,STL,,1,157,81,105,49,,,Y,N,679,5438,1515,259,72,70,428,438,40,,,,475,407,2.5700000000,94,21,15,4281,1246,33,477,639,151,183,0.97,St. Louis Cardinals,Sportsman's Park IV,517135,106,101,STL,SLN,SLN +1944,AL,BOS,BOS,,4,156,78,77,77,,,N,N,739,5400,1456,277,56,69,522,505,60,40,,,676,592,3.8200000000,58,7,17,4182,1404,66,592,524,172,154,0.97,Boston Red Sox,Fenway Park II,506975,99,100,BOS,BOS,BOS +1944,AL,CHA,CHW,,7,154,77,71,83,,,N,N,543,5292,1307,210,55,23,439,448,66,47,,,662,553,3.5800000000,64,5,17,4170,1411,68,420,481,183,154,0.97,Chicago White Sox,Comiskey Park,563539,98,99,CHW,CHA,CHA +1944,AL,CLE,CLE,,5,155,78,72,82,,,N,N,643,5481,1458,270,50,70,512,593,48,42,,,677,575,3.6500000000,48,7,18,4257,1428,40,621,524,164,192,0.97,Cleveland Indians,League Park II/Cleveland Stadium,475272,96,96,CLE,CLE,CLE +1944,AL,DET,DET,,2,156,78,88,66,,,N,N,658,5344,1405,220,44,60,532,500,61,55,,,581,481,3.0900000000,87,20,8,4200,1373,39,452,568,190,184,0.97,Detroit Tigers,Briggs Stadium,923176,105,103,DET,DET,DET +1944,AL,NYA,NYY,,3,154,78,83,71,,,N,N,674,5331,1410,216,74,96,523,627,91,31,,,617,524,3.3900000000,78,9,13,4170,1351,82,532,529,156,170,0.97,New York Yankees,Yankee Stadium I,789995,104,102,NYY,NYA,NYA +1944,AL,PHA,OAK,,5,155,76,72,82,,,N,N,525,5312,1364,169,47,36,422,490,42,32,,,594,506,3.2600000000,72,10,14,4191,1345,58,390,534,174,127,0.97,Philadelphia Athletics,Shibe Park,505322,97,101,PHA,PHA,PHA +1944,AL,SLA,BAL,,1,154,77,89,65,,,Y,N,684,5269,1328,223,45,72,531,604,44,33,,,587,492,3.1700000000,71,16,17,4191,1392,58,469,581,171,142,0.97,St. Louis Browns,Sportsman's Park IV,508644,107,107,SLB,SLA,SLA +1944,AL,WS1,MIN,,8,154,77,64,90,,,N,N,592,5319,1386,186,42,33,470,477,127,59,,,664,536,3.4900000000,83,13,11,4143,1410,48,475,503,218,156,0.96,Washington Senators,Griffith Stadium I,525235,95,95,WSH,WS1,WS1 +1944,NL,BRO,LAD,,7,155,77,63,91,,,N,N,690,5393,1450,255,51,56,486,451,45,,,,832,711,4.6800000000,50,4,13,4101,1471,75,660,487,197,112,0.96,Brooklyn Dodgers,Ebbets Field,605905,98,98,BRO,BRO,BRO +1944,NL,BSN,ATL,,6,155,78,65,89,,,N,N,593,5282,1299,250,39,79,456,509,37,,,,674,566,3.6700000000,70,13,12,4164,1430,80,527,454,182,160,0.97,Boston Braves,Braves Field,208691,104,106,BSN,BSN,BSN +1944,NL,CHN,CHC,,4,157,78,75,79,,,N,N,702,5462,1425,236,46,71,520,521,53,,,,669,558,3.5900000000,70,11,13,4200,1484,75,458,545,185,151,0.97,Chicago Cubs,Wrigley Field,640110,99,97,CHC,CHN,CHN +1944,NL,CIN,CIN,,3,155,78,89,65,,,N,N,573,5271,1340,229,31,51,423,391,51,,,,537,461,2.9700000000,93,17,12,4194,1292,60,390,369,138,153,0.97,Cincinnati Reds,Crosley Field,409567,96,97,CIN,CIN,CIN +1944,NL,NY1,SFG,,5,155,75,67,87,,,N,N,682,5306,1398,191,47,93,512,480,39,,,,773,650,4.2900000000,47,4,21,4089,1413,116,587,499,179,128,0.97,New York Giants,Polo Grounds IV,674483,99,101,NYG,NY1,NY1 +1944,NL,PHI,PHI,,8,154,79,61,92,,,N,N,539,5301,1331,199,42,55,470,500,32,,,,658,564,3.6400000000,66,11,6,4185,1407,49,459,496,177,138,0.97,Philadelphia Blue Jays,Shibe Park,369586,96,99,PHI,PHI,PHI +1944,NL,PIT,PIT,,2,158,81,90,63,,,N,N,744,5428,1441,248,80,70,573,616,87,,,,662,540,3.4400000000,77,10,19,4242,1466,65,435,452,191,122,0.97,Pittsburgh Pirates,Forbes Field,604278,105,103,PIT,PIT,PIT +1944,NL,SLN,STL,,1,157,77,105,49,,,Y,Y,772,5475,1507,274,59,100,544,473,37,,,,490,423,2.6700000000,89,26,12,4281,1228,55,468,637,112,162,0.98,St. Louis Cardinals,Sportsman's Park IV,461968,103,99,STL,SLN,SLN +1945,AL,BOS,BOS,,7,157,78,71,83,,,N,N,599,5367,1393,225,44,50,541,534,72,50,,,674,587,3.8000000000,71,15,13,4170,1389,58,656,490,168,198,0.97,Boston Red Sox,Fenway Park II,603794,103,101,BOS,BOS,BOS +1945,AL,CHA,CHW,,6,150,74,71,78,,,N,N,596,5077,1330,204,55,22,470,467,78,54,,,633,545,3.6900000000,84,13,13,3990,1400,63,448,486,180,139,0.97,Chicago White Sox,Comiskey Park,657981,97,98,CHW,CHA,CHA +1945,AL,CLE,CLE,,5,147,77,73,72,,,N,N,557,4898,1249,216,48,65,505,578,19,31,,,548,479,3.3100000000,76,14,12,3906,1269,39,501,497,126,149,0.97,Cleveland Indians,League Park II/Cleveland Stadium,558182,95,96,CLE,CLE,CLE +1945,AL,DET,DET,,1,155,76,88,65,,,Y,Y,633,5257,1345,227,47,77,517,533,60,54,,,565,463,2.9900000000,78,19,16,4179,1305,48,538,588,158,173,0.97,Detroit Tigers,Briggs Stadium,1280341,107,105,DET,DET,DET +1945,AL,NYA,NYY,,4,152,76,81,71,,,N,N,676,5176,1343,189,61,93,618,567,64,43,,,606,519,3.4500000000,78,9,14,4065,1277,66,485,474,175,170,0.97,New York Yankees,Yankee Stadium I,881845,105,103,NYY,NYA,NYA +1945,AL,PHA,OAK,,8,153,77,52,98,,,N,N,494,5296,1297,201,37,33,449,463,25,45,,,638,555,3.6200000000,65,11,8,4143,1380,55,571,531,152,160,0.97,Philadelphia Athletics,Shibe Park,462631,98,101,PHA,PHA,PHA +1945,AL,SLA,BAL,,3,154,76,81,70,,,N,N,597,5227,1302,215,37,63,500,555,25,31,,,548,482,3.1400000000,91,10,8,4146,1307,59,506,570,143,123,0.97,St. Louis Browns,Sportsman's Park IV,482986,106,106,SLB,SLA,SLA +1945,AL,WS1,MIN,,2,156,78,87,67,,,N,N,622,5326,1375,197,63,27,545,489,110,65,,,562,458,2.9200000000,82,19,11,4236,1307,42,440,550,183,124,0.97,Washington Senators,Griffith Stadium I,652660,91,92,WSH,WS1,WS1 +1945,NL,BRO,LAD,,3,155,78,87,67,,,N,N,795,5418,1468,257,71,57,629,434,75,,,,724,572,3.7000000000,61,7,18,4176,1357,74,586,557,230,144,0.96,Brooklyn Dodgers,Ebbets Field,1059220,99,99,BRO,BRO,BRO +1945,NL,BSN,ATL,,6,154,75,67,85,,,N,N,721,5441,1453,229,25,101,520,510,82,,,,728,624,4.0400000000,57,7,13,4173,1474,99,557,404,193,160,0.96,Boston Braves,Braves Field,374178,100,101,BSN,BSN,BSN +1945,NL,CHN,CHC,,1,155,76,98,56,,,Y,N,735,5298,1465,229,52,57,554,462,69,,,,532,452,2.9800000000,86,15,14,4098,1301,57,385,541,119,124,0.98,Chicago Cubs,Wrigley Field,1036386,98,96,CHC,CHN,CHN +1945,NL,CIN,CIN,,7,154,77,61,93,,,N,N,536,5283,1317,221,26,56,392,532,71,,,,694,607,4.0000000000,77,11,6,4095,1438,70,534,372,146,138,0.97,Cincinnati Reds,Crosley Field,290070,98,99,CIN,CIN,CIN +1945,NL,NY1,SFG,,5,154,78,78,74,,,N,N,668,5350,1439,175,35,114,501,457,38,,,,700,620,4.0600000000,53,13,21,4122,1401,85,528,530,166,112,0.97,New York Giants,Polo Grounds IV,1016468,101,102,NYG,NY1,NY1 +1945,NL,PHI,PHI,,8,154,77,46,108,,,N,N,548,5203,1278,197,27,56,449,501,54,,,,865,697,4.6400000000,31,4,26,4056,1544,61,608,432,234,150,0.96,Philadelphia Phillies,Shibe Park,285057,96,100,PHI,PHI,PHI +1945,NL,PIT,PIT,,4,155,79,82,72,,,N,N,753,5343,1425,259,56,72,590,480,81,,,,686,579,3.7600000000,73,8,16,4161,1477,61,455,518,178,141,0.97,Pittsburgh Pirates,Forbes Field,604694,104,104,PIT,PIT,PIT +1945,NL,SLN,STL,,2,155,78,95,59,,,N,N,756,5487,1498,256,44,64,515,488,55,,,,583,507,3.2400000000,77,18,9,4224,1351,70,497,510,136,150,0.97,St. Louis Cardinals,Sportsman's Park IV,594630,103,99,STL,SLN,SLN +1946,AL,BOS,BOS,,1,156,78,104,50,,,Y,N,792,5318,1441,268,50,109,687,661,45,36,,,594,524,3.3800000000,79,15,20,4188,1359,89,501,667,139,165,0.97,Boston Red Sox,Fenway Park II,1416944,106,105,BOS,BOS,BOS +1946,AL,CHA,CHW,,5,155,79,74,80,,,N,N,562,5312,1364,206,44,37,501,600,78,64,,,595,479,3.1000000000,62,9,16,4176,1348,80,508,550,173,170,0.97,Chicago White Sox,Comiskey Park,983403,96,97,CHW,CHA,CHA +1946,AL,CLE,CLE,,6,156,77,68,86,,,N,N,537,5242,1285,233,56,79,506,697,57,49,,,638,558,3.6200000000,63,16,13,4164,1282,84,649,789,147,147,0.97,Cleveland Indians,League Park II/Cleveland Stadium,1057289,93,94,CLE,CLE,CLE +1946,AL,DET,DET,,2,155,79,92,62,,,N,N,704,5318,1373,212,41,108,622,616,65,41,,,567,502,3.2200000000,94,18,15,4206,1277,97,497,896,155,138,0.97,Detroit Tigers,Briggs Stadium,1722590,107,105,DET,DET,DET +1946,AL,NYA,NYY,,3,154,77,87,67,,,N,N,684,5139,1275,208,50,136,627,706,48,35,,,547,473,3.1300000000,68,17,17,4083,1232,66,552,653,147,174,0.97,New York Yankees,Yankee Stadium I,2265512,101,98,NYY,NYA,NYA +1946,AL,PHA,OAK,,8,155,78,49,105,,,N,N,529,5200,1317,220,51,40,482,594,39,30,,,680,582,3.9000000000,61,10,5,4026,1371,83,577,562,167,141,0.97,Philadelphia Athletics,Shibe Park,621793,98,100,PHA,PHA,PHA +1946,AL,SLA,BAL,,7,156,77,66,88,,,N,N,621,5373,1350,220,46,84,465,713,23,35,,,710,607,3.9500000000,63,13,12,4146,1465,73,573,574,159,157,0.97,St. Louis Browns,Sportsman's Park IV,526435,106,107,SLB,SLA,SLA +1946,AL,WS1,MIN,,4,155,76,76,78,,,N,N,608,5337,1388,260,63,60,511,641,51,50,,,706,580,3.7400000000,71,8,10,4188,1459,81,547,537,211,162,0.96,Washington Senators,Griffith Stadium I,1027216,94,95,WSH,WS1,WS1 +1946,NL,BRO,LAD,,2,157,79,96,60,,,N,N,701,5285,1376,233,66,55,691,575,100,,,,570,481,3.0500000000,52,14,28,4254,1280,58,671,647,174,154,0.97,Brooklyn Dodgers,Ebbets Field,1796824,101,99,BRO,BRO,BRO +1946,NL,BSN,ATL,,4,154,77,81,72,,,N,N,630,5225,1377,238,48,44,558,468,60,,,,592,510,3.3500000000,73,10,12,4113,1291,76,478,566,169,129,0.97,Boston Braves,Braves Field,969673,101,101,BSN,BSN,BSN +1946,NL,CHN,CHC,,3,155,77,82,71,,,N,N,626,5298,1344,223,50,56,586,599,43,,,,581,501,3.2400000000,59,15,11,4179,1370,58,527,619,146,119,0.97,Chicago Cubs,Wrigley Field,1342970,98,97,CHC,CHN,CHN +1946,NL,CIN,CIN,,6,156,77,67,87,,,N,N,523,5291,1262,206,33,65,493,604,82,,,,570,484,3.0800000000,69,17,11,4239,1334,70,467,506,152,192,0.97,Cincinnati Reds,Crosley Field,715751,97,99,CIN,CIN,CIN +1946,NL,NY1,SFG,,8,154,77,61,93,,,N,N,612,5191,1326,176,37,121,532,546,46,,,,685,589,3.9200000000,47,8,13,4059,1313,114,660,581,159,121,0.97,New York Giants,Polo Grounds IV,1219873,100,101,NYG,NY1,NY1 +1946,NL,PHI,PHI,,5,155,78,69,85,,,N,N,560,5233,1351,209,40,80,417,590,41,,,,705,607,3.9900000000,55,11,23,4107,1442,73,542,490,147,144,0.97,Philadelphia Phillies,Shibe Park,1045247,97,100,PHI,PHI,PHI +1946,NL,PIT,PIT,,7,155,78,63,91,,,N,N,552,5199,1300,202,52,60,592,555,48,,,,668,566,3.7200000000,61,10,6,4110,1406,50,561,458,184,127,0.97,Pittsburgh Pirates,Forbes Field,749962,103,104,PIT,PIT,PIT +1946,NL,SLN,STL,,1,156,78,98,58,,,Y,Y,712,5372,1426,265,56,81,530,537,58,,,,545,467,3.0100000000,75,18,15,4191,1326,63,493,607,123,167,0.98,St. Louis Cardinals,Sportsman's Park IV,1061807,104,101,STL,SLN,SLN +1947,AL,BOS,BOS,,3,157,81,83,71,,,N,N,720,5322,1412,206,54,103,666,590,41,35,,,669,589,3.8100000000,64,13,19,4173,1383,84,575,586,137,172,0.97,Boston Red Sox,Fenway Park II,1427315,107,105,BOS,BOS,BOS +1947,AL,CHA,CHW,,6,155,75,70,84,,,N,N,553,5274,1350,211,41,53,492,527,91,57,,,661,563,3.6400000000,47,11,27,4173,1384,76,603,522,155,180,0.97,Chicago White Sox,Comiskey Park,876948,96,98,CHW,CHA,CHA +1947,AL,CLE,CLE,,4,157,78,80,74,,,N,N,687,5367,1392,234,51,112,502,609,29,25,,,588,536,3.4400000000,55,13,29,4206,1244,94,628,590,104,178,0.98,Cleveland Indians,Cleveland Stadium,1521978,98,94,CLE,CLE,CLE +1947,AL,DET,DET,,2,158,80,85,69,,,N,N,714,5276,1363,234,42,103,762,565,52,60,,,642,555,3.5700000000,77,15,18,4194,1382,79,531,648,155,142,0.97,Detroit Tigers,Briggs Stadium,1398093,104,103,DET,DET,DET +1947,AL,NYA,NYY,,1,155,77,97,57,,,Y,Y,794,5308,1439,230,72,115,610,581,27,23,,,568,518,3.3900000000,73,14,21,4122,1221,95,628,691,109,151,0.98,New York Yankees,Yankee Stadium I,2178937,99,95,NYY,NYA,NYA +1947,AL,PHA,OAK,,5,156,78,78,76,,,N,N,633,5198,1311,218,52,61,605,563,37,33,,,614,542,3.5100000000,70,12,15,4173,1291,85,597,493,143,161,0.97,Philadelphia Athletics,Shibe Park,911566,102,103,PHA,PHA,PHA +1947,AL,SLA,BAL,,8,154,77,59,95,,,N,N,564,5145,1238,189,52,90,583,664,69,49,,,744,657,4.3300000000,50,7,13,4095,1426,103,604,552,134,169,0.97,St. Louis Browns,Sportsman's Park IV,320474,102,105,SLB,SLA,SLA +1947,AL,WS1,MIN,,7,154,77,64,90,,,N,N,496,5112,1234,186,48,42,525,534,53,51,,,675,601,3.9700000000,67,15,12,4086,1408,63,579,551,142,151,0.97,Washington Senators,Griffith Stadium I,850758,97,100,WSH,WS1,WS1 +1947,NL,BRO,LAD,,1,155,78,94,60,,,Y,N,774,5249,1428,241,50,83,732,561,88,,,,668,584,3.8200000000,47,14,34,4125,1299,104,626,592,129,164,0.97,Brooklyn Dodgers,Ebbets Field,1807526,104,101,BRO,BRO,BRO +1947,NL,BSN,ATL,,3,154,77,86,68,,,N,N,701,5253,1444,265,42,85,558,500,58,,,,622,548,3.6200000000,74,14,13,4086,1342,93,453,494,153,124,0.97,Boston Braves,Braves Field,1277361,98,97,BSN,BSN,BSN +1947,NL,CHN,CHC,,6,155,79,69,85,,,N,N,567,5305,1373,231,48,71,471,578,22,,,,722,614,4.0400000000,46,8,15,4101,1449,106,618,571,150,159,0.97,Chicago Cubs,Wrigley Field,1364039,96,97,CHC,CHN,CHN +1947,NL,CIN,CIN,,5,154,77,73,81,,,N,N,681,5299,1372,242,43,95,539,530,46,,,,755,669,4.4100000000,54,13,13,4095,1442,102,589,633,136,134,0.97,Cincinnati Reds,Crosley Field,899975,100,102,CIN,CIN,CIN +1947,NL,NY1,SFG,,4,155,76,81,73,,,N,N,830,5343,1446,220,48,221,494,568,29,,,,761,672,4.4400000000,58,6,14,4089,1428,122,590,553,155,136,0.97,New York Giants,Polo Grounds IV,1600793,101,100,NYG,NY1,NY1 +1947,NL,PHI,PHI,,7,155,77,62,92,,,N,N,589,5256,1354,210,52,60,464,594,60,,,,687,599,3.9600000000,70,8,14,4086,1399,98,513,514,152,140,0.97,Philadelphia Phillies,Shibe Park,907332,96,98,PHI,PHI,PHI +1947,NL,PIT,PIT,,7,156,79,62,92,,,N,N,744,5307,1385,216,44,156,607,687,30,,,,817,714,4.6800000000,44,9,13,4122,1488,155,592,530,149,131,0.97,Pittsburgh Pirates,Forbes Field,1283531,103,104,PIT,PIT,PIT +1947,NL,SLN,STL,,2,156,77,89,65,,,N,N,780,5422,1462,235,65,115,612,511,28,,,,634,548,3.5300000000,65,12,20,4191,1417,106,495,642,127,169,0.97,St. Louis Cardinals,Sportsman's Park IV,1247913,104,101,STL,SLN,SLN +1948,AL,BOS,BOS,,2,155,78,96,59,,,N,N,907,5363,1471,277,40,121,823,552,38,17,,,720,653,4.2600000000,70,11,13,4137,1445,83,592,513,116,174,0.98,Boston Red Sox,Fenway Park II,1558798,105,102,BOS,BOS,BOS +1948,AL,CHA,CHW,,8,154,76,51,101,,,N,N,559,5192,1303,172,39,55,595,528,46,47,,,814,731,4.8900000000,35,2,23,4035,1454,89,673,403,154,176,0.97,Chicago White Sox,Comiskey Park,777844,96,99,CHW,CHA,CHA +1948,AL,CLE,CLE,,1,156,79,97,58,,,Y,Y,840,5446,1534,242,54,155,646,575,54,44,,,568,504,3.2200000000,66,26,30,4227,1246,82,628,595,114,183,0.98,Cleveland Indians,Cleveland Stadium,2620627,97,95,CLE,CLE,CLE +1948,AL,DET,DET,,5,154,77,78,76,,,N,N,700,5235,1396,219,58,78,671,504,22,32,,,726,635,4.1500000000,60,5,22,4131,1367,92,589,678,155,143,0.97,Detroit Tigers,Briggs Stadium,1743035,103,102,DET,DET,DET +1948,AL,NYA,NYY,,3,154,77,94,60,,,N,N,857,5324,1480,251,75,139,623,478,24,24,,,633,569,3.7500000000,62,16,24,4095,1289,94,641,654,120,161,0.97,New York Yankees,Yankee Stadium I,2373901,99,95,NYY,NYA,NYA +1948,AL,PHA,OAK,,4,154,77,84,70,,,N,N,729,5181,1345,231,47,68,726,523,40,32,,,735,673,4.4300000000,74,7,18,4104,1456,86,638,486,113,180,0.98,Philadelphia Athletics,Shibe Park,945076,101,101,PHA,PHA,PHA +1948,AL,SLA,BAL,,6,155,76,59,94,,,N,N,671,5303,1438,251,62,63,578,572,63,44,,,849,764,5.0100000000,35,4,20,4119,1513,103,737,531,168,190,0.97,St. Louis Browns,Sportsman's Park IV,335564,103,106,SLB,SLA,SLA +1948,AL,WS1,MIN,,7,154,78,56,97,,,N,N,578,5111,1245,203,75,31,568,572,76,48,,,796,701,4.6500000000,42,4,22,4071,1439,81,734,446,154,144,0.97,Washington Senators,Griffith Stadium I,795254,97,101,WSH,WS1,WS1 +1948,NL,BRO,LAD,,3,155,78,84,70,,,N,N,744,5328,1393,256,54,91,601,684,114,,,,667,580,3.7500000000,52,9,22,4176,1328,119,633,670,160,151,0.97,Brooklyn Dodgers,Ebbets Field,1398967,104,101,BRO,BRO,BRO +1948,NL,BSN,ATL,,1,154,76,91,62,,,Y,N,739,5297,1458,272,49,95,671,536,43,,,,584,520,3.3700000000,70,10,17,4167,1354,93,430,579,143,132,0.97,Boston Braves,Braves Field,1455439,99,98,BSN,BSN,BSN +1948,NL,CHN,CHC,,8,155,78,64,90,,,N,N,597,5352,1402,225,44,87,443,578,39,,,,706,602,4.0000000000,51,7,10,4065,1355,89,619,636,172,152,0.97,Chicago Cubs,Wrigley Field,1237792,95,98,CHC,CHN,CHN +1948,NL,CIN,CIN,,7,153,77,64,89,,,N,N,588,5127,1266,221,37,104,478,586,42,,,,752,667,4.4700000000,40,8,20,4029,1410,104,572,599,153,135,0.97,Cincinnati Reds,Crosley Field,823386,97,99,CIN,CIN,CIN +1948,NL,NY1,SFG,,5,155,77,78,76,,,N,N,780,5277,1352,210,49,164,599,648,51,,,,704,600,3.9300000000,54,15,21,4119,1425,122,556,527,156,134,0.97,New York Giants,Polo Grounds IV,1459269,101,100,NYG,NY1,NY1 +1948,NL,PHI,PHI,,6,155,76,66,88,,,N,N,591,5287,1367,227,39,91,440,598,68,,,,729,617,4.0800000000,61,6,15,4086,1385,95,556,550,210,126,0.96,Philadelphia Phillies,Shibe Park,767429,98,99,PHI,PHI,PHI +1948,NL,PIT,PIT,,4,156,80,83,71,,,N,N,706,5286,1388,191,54,108,580,578,68,,,,699,632,4.1500000000,65,5,19,4113,1373,120,564,543,135,150,0.97,Pittsburgh Pirates,Forbes Field,1517021,102,103,PIT,PIT,PIT +1948,NL,SLN,STL,,2,155,77,85,69,,,N,N,742,5302,1396,238,58,105,594,521,24,,,,646,594,3.9100000000,60,13,18,4104,1392,103,476,625,118,138,0.98,St. Louis Cardinals,Sportsman's Park IV,1111440,106,103,STL,SLN,SLN +1949,AL,BOS,BOS,,2,155,77,96,58,,,N,N,896,5320,1500,272,36,131,835,510,43,25,,,667,607,3.9700000000,84,16,16,4131,1375,82,661,598,120,207,0.98,Boston Red Sox,Fenway Park II,1596650,108,104,BOS,BOS,BOS +1949,AL,CHA,CHW,,6,154,77,63,91,,,N,N,648,5204,1340,207,66,43,702,596,62,55,,,737,651,4.3000000000,57,10,17,4089,1362,108,693,502,135,180,0.97,Chicago White Sox,Comiskey Park,937151,96,99,CHW,CHA,CHA +1949,AL,CLE,CLE,,3,154,77,89,65,,,N,N,675,5221,1358,194,58,112,601,534,44,40,,,574,516,3.3600000000,65,10,19,4149,1275,82,611,594,103,192,0.98,Cleveland Indians,Cleveland Stadium,2233771,98,95,CLE,CLE,CLE +1949,AL,DET,DET,,4,155,78,87,67,,,N,N,751,5259,1405,215,51,88,751,502,39,52,,,655,584,3.7700000000,70,19,12,4179,1338,102,628,631,132,174,0.97,Detroit Tigers,Briggs Stadium,1821204,101,99,DET,DET,DET +1949,AL,NYA,NYY,,1,155,78,97,57,,,Y,Y,829,5196,1396,215,60,115,731,539,58,30,,,637,562,3.6900000000,59,12,36,4113,1231,98,812,671,137,195,0.97,New York Yankees,Yankee Stadium I,2283676,100,96,NYY,NYA,NYA +1949,AL,PHA,OAK,,5,154,77,81,73,,,N,N,726,5123,1331,214,49,82,783,493,36,25,,,725,642,4.2300000000,85,9,11,4095,1359,105,758,490,140,217,0.97,Philadelphia Athletics,Shibe Park,816514,97,98,PHA,PHA,PHA +1949,AL,SLA,BAL,,7,155,77,53,101,,,N,N,667,5112,1301,213,30,117,631,700,38,39,,,913,776,5.2100000000,43,3,16,4023,1583,113,685,432,165,154,0.97,St. Louis Browns,Sportsman's Park IV,270936,105,109,SLB,SLA,SLA +1949,AL,WS1,MIN,,8,154,77,50,104,,,N,N,584,5234,1330,207,41,81,593,495,46,33,,,868,762,5.1000000000,44,9,9,4035,1438,79,779,451,161,168,0.97,Washington Senators,Griffith Stadium I,770745,98,101,WSH,WS1,WS1 +1949,NL,BRO,LAD,,1,156,78,97,57,,,Y,N,879,5400,1477,236,47,152,638,570,117,,,,651,594,3.8000000000,62,15,17,4224,1306,132,582,743,124,162,0.97,Brooklyn Dodgers,Ebbets Field,1633747,105,102,BRO,BRO,BRO +1949,NL,BSN,ATL,,4,157,77,75,79,,,N,N,706,5336,1376,246,33,103,684,656,28,,,,719,621,3.9900000000,68,12,11,4200,1466,110,520,589,149,144,0.97,Boston Braves,Braves Field,1081795,95,94,BSN,BSN,BSN +1949,NL,CHN,CHC,,8,154,77,61,93,,,N,N,593,5214,1336,212,53,97,396,573,53,,,,773,678,4.5000000000,44,8,17,4071,1487,104,575,544,187,160,0.97,Chicago Cubs,Wrigley Field,1143139,97,99,CHC,CHN,CHN +1949,NL,CIN,CIN,,7,156,78,62,92,,,N,N,627,5469,1423,264,35,86,429,559,31,,,,770,676,4.3400000000,55,10,6,4203,1423,124,640,538,136,150,0.97,Cincinnati Reds,Crosley Field,707782,101,104,CIN,CIN,CIN +1949,NL,NY1,SFG,,5,156,79,73,81,,,N,N,736,5308,1383,203,52,147,613,523,43,,,,693,583,3.8200000000,68,10,9,4122,1328,132,544,516,163,134,0.97,New York Giants,Polo Grounds IV,1218446,101,99,NYG,NY1,NY1 +1949,NL,PHI,PHI,,3,154,77,81,73,,,N,N,662,5307,1349,232,55,122,528,670,27,,,,668,601,3.8900000000,58,12,15,4173,1389,104,502,495,158,141,0.97,Philadelphia Phillies,Shibe Park,819698,97,97,PHI,PHI,PHI +1949,NL,PIT,PIT,,6,154,77,71,83,,,N,N,681,5214,1350,191,41,126,548,554,48,,,,760,689,4.5700000000,53,9,15,4068,1452,142,535,556,132,173,0.97,Pittsburgh Pirates,Forbes Field,1449435,102,104,PIT,PIT,PIT +1949,NL,SLN,STL,,2,157,79,96,58,,,N,N,766,5463,1513,281,54,102,569,482,17,,,,616,538,3.4400000000,64,13,19,4221,1356,87,507,606,142,149,0.97,St. Louis Cardinals,Sportsman's Park IV,1430676,104,103,STL,SLN,SLN +1950,AL,BOS,BOS,,3,154,77,94,60,,,N,N,1027,5516,1665,287,61,161,719,582,32,17,,,804,739,4.8800000000,66,6,28,4086,1413,121,748,630,111,181,0.98,Boston Red Sox,Fenway Park II,1344080,111,108,BOS,BOS,BOS +1950,AL,CHA,CHW,,6,156,79,60,94,,,N,N,625,5260,1368,172,47,93,551,566,19,22,,,749,669,4.4100000000,62,7,9,4095,1370,107,734,566,135,181,0.97,Chicago White Sox,Comiskey Park,781330,97,98,CHW,CHA,CHA +1950,AL,CLE,CLE,,4,155,77,92,62,,,N,N,806,5263,1417,222,46,164,693,624,40,34,,,654,574,3.7500000000,69,11,16,4134,1289,120,647,674,129,150,0.97,Cleveland Indians,Cleveland Stadium,1727464,97,94,CLE,CLE,CLE +1950,AL,DET,DET,,2,157,81,95,59,,,N,N,837,5381,1518,285,50,114,722,480,23,40,,,713,644,4.1200000000,72,9,20,4221,1444,141,553,576,120,194,0.98,Detroit Tigers,Briggs Stadium,1951474,103,102,DET,DET,DET +1950,AL,NYA,NYY,,1,155,77,98,56,,,Y,Y,914,5361,1511,234,70,159,687,463,41,28,,,691,633,4.1500000000,66,12,31,4116,1322,118,708,712,119,188,0.97,New York Yankees,Yankee Stadium I,2081380,97,94,NYY,NYA,NYA +1950,AL,PHA,OAK,,8,154,77,52,102,,,N,N,670,5212,1361,204,53,100,685,493,42,25,,,913,821,5.4900000000,50,3,18,4038,1528,138,729,466,155,208,0.97,Philadelphia Athletics,Shibe Park,309805,98,99,PHA,PHA,PHA +1950,AL,SLA,BAL,,7,154,74,58,96,,,N,N,684,5163,1269,235,43,106,690,744,39,40,,,916,789,5.2000000000,56,7,14,4095,1629,129,651,448,196,155,0.96,St. Louis Browns,Sportsman's Park IV,247131,104,108,SLB,SLA,SLA +1950,AL,WS1,MIN,,5,155,78,67,87,,,N,N,690,5251,1365,190,53,76,671,606,42,25,,,813,706,4.6600000000,59,7,18,4092,1479,99,648,486,167,181,0.97,Washington Senators,Griffith Stadium I,699697,95,98,WSH,WS1,WS1 +1950,NL,BRO,LAD,,2,155,78,89,65,,,N,N,847,5364,1461,247,46,194,607,632,77,,,,724,661,4.2800000000,62,10,21,4167,1397,163,591,772,127,183,0.97,Brooklyn Dodgers,Ebbets Field,1185896,103,99,BRO,BRO,BRO +1950,NL,BSN,ATL,,4,156,79,83,71,,,N,N,785,5363,1411,246,36,148,615,616,71,,,,736,637,4.1400000000,88,7,10,4155,1411,129,554,615,182,146,0.97,Boston Braves,Braves Field,944391,94,93,BSN,BSN,BSN +1950,NL,CHN,CHC,,7,154,78,64,89,,,N,N,643,5230,1298,224,47,161,479,767,46,,,,772,652,4.2800000000,55,9,19,4113,1452,130,593,559,198,169,0.96,Chicago Cubs,Wrigley Field,1165944,99,102,CHC,CHN,CHN +1950,NL,CIN,CIN,,6,153,76,66,87,,,N,N,654,5253,1366,257,27,99,504,497,37,,,,734,651,4.3200000000,67,7,13,4071,1363,145,582,686,140,132,0.97,Cincinnati Reds,Crosley Field,538794,100,102,CIN,CIN,CIN +1950,NL,NY1,SFG,,3,154,76,86,68,,,N,N,735,5238,1352,204,50,133,627,629,42,,,,643,567,3.7100000000,70,19,15,4125,1268,140,536,596,137,181,0.97,New York Giants,Polo Grounds IV,1008878,101,99,NYG,NY1,NY1 +1950,NL,PHI,PHI,,1,157,78,91,63,,,Y,N,722,5426,1440,225,55,125,535,569,33,,,,624,547,3.5000000000,57,13,27,4218,1324,122,530,620,151,155,0.97,Philadelphia Phillies,Shibe Park,1217035,98,97,PHI,PHI,PHI +1950,NL,PIT,PIT,,8,154,77,57,96,,,N,N,681,5327,1404,227,59,138,564,693,43,,,,857,754,4.9600000000,42,6,16,4104,1472,152,616,556,136,165,0.97,Pittsburgh Pirates,Forbes Field,1166267,103,106,PIT,PIT,PIT +1950,NL,SLN,STL,,5,153,76,78,75,,,N,N,693,5215,1353,255,50,102,606,604,23,,,,670,598,3.9700000000,57,10,14,4068,1398,119,535,603,130,172,0.97,St. Louis Cardinals,Sportsman's Park IV,1093411,104,103,STL,SLN,SLN +1951,AL,BOS,BOS,,3,154,75,87,67,,,N,N,804,5378,1428,233,32,127,756,594,20,21,,,725,644,4.1400000000,46,7,24,4197,1413,100,599,658,138,184,0.97,Boston Red Sox,Fenway Park II,1312282,110,109,BOS,BOS,BOS +1951,AL,CHA,CHW,,4,155,78,81,73,,,N,N,714,5378,1453,229,64,86,596,524,99,70,,,644,551,3.5000000000,74,11,14,4254,1353,109,549,572,151,176,0.97,Chicago White Sox,Comiskey Park,1328234,98,98,CHW,CHA,CHA +1951,AL,CLE,CLE,,2,155,77,93,61,,,N,N,696,5250,1346,208,35,140,606,632,52,35,,,594,522,3.3800000000,76,10,19,4173,1287,86,577,642,134,151,0.97,Cleveland Indians,Cleveland Stadium,1704984,95,92,CLE,CLE,CLE +1951,AL,DET,DET,,5,154,77,73,81,,,N,N,685,5336,1413,231,35,104,568,525,37,34,,,741,660,4.2900000000,51,8,17,4152,1385,102,602,597,163,166,0.97,Detroit Tigers,Briggs Stadium,1132641,100,101,DET,DET,DET +1951,AL,NYA,NYY,,1,154,78,98,56,,,Y,Y,798,5194,1395,208,48,140,605,547,78,39,,,621,541,3.5600000000,66,24,22,4101,1290,92,562,664,144,190,0.97,New York Yankees,Yankee Stadium I,1950107,97,93,NYY,NYA,NYA +1951,AL,PHA,OAK,,6,154,79,70,84,,,N,N,736,5277,1381,262,43,102,677,565,47,36,,,745,674,4.4700000000,52,7,22,4074,1421,109,569,437,135,204,0.97,Philadelphia Athletics,Shibe Park,465469,101,103,PHA,PHA,PHA +1951,AL,SLA,BAL,,8,154,77,52,102,,,N,N,611,5219,1288,223,47,86,521,693,35,38,,,882,789,5.1800000000,56,5,9,4110,1525,131,801,550,171,179,0.97,St. Louis Browns,Sportsman's Park IV,293790,103,107,SLB,SLA,SLA +1951,AL,WS1,MIN,,7,154,76,62,92,,,N,N,672,5329,1399,242,45,54,560,515,45,38,,,764,681,4.4900000000,58,6,13,4098,1429,110,630,475,160,148,0.97,Washington Senators,Griffith Stadium I,695167,98,100,WSH,WS1,WS1 +1951,NL,BRO,LAD,,2,158,78,97,60,,,N,N,855,5492,1511,249,37,184,603,649,89,70,,,672,613,3.8800000000,64,10,13,4269,1360,150,549,693,128,192,0.97,Brooklyn Dodgers,Ebbets Field,1282628,102,99,BRO,BRO,BRO +1951,NL,BSN,ATL,,4,155,78,76,78,,,N,N,723,5293,1385,234,37,130,565,617,80,34,,,662,579,3.7500000000,73,16,12,4167,1378,96,595,604,145,157,0.97,Boston Braves,Braves Field,487475,93,93,BSN,BSN,BSN +1951,NL,CHN,CHC,,8,155,77,62,92,,,N,N,614,5307,1327,200,47,103,477,647,63,30,,,750,668,4.3400000000,48,10,10,4155,1416,125,572,544,181,161,0.97,Chicago Cubs,Wrigley Field,894415,102,104,CHC,CHN,CHN +1951,NL,CIN,CIN,,6,155,77,68,86,,,N,N,559,5285,1309,215,33,88,415,577,44,40,,,667,571,3.7000000000,55,14,23,4170,1357,119,490,584,140,141,0.97,Cincinnati Reds,Crosley Field,588268,101,103,CIN,CIN,CIN +1951,NL,NY1,SFG,,1,157,78,98,59,,,Y,N,781,5360,1396,201,53,179,671,624,55,34,,,641,546,3.4800000000,64,9,18,4236,1334,148,482,625,170,175,0.97,New York Giants,Polo Grounds IV,1059539,101,99,NYG,NY1,NY1 +1951,NL,PHI,PHI,,5,154,77,73,81,,,N,N,648,5332,1384,199,47,108,505,525,63,28,,,644,586,3.8100000000,57,19,15,4152,1373,110,497,570,138,146,0.97,Philadelphia Phillies,Shibe Park,937658,99,97,PHI,PHI,PHI +1951,NL,PIT,PIT,,7,155,78,64,90,,,N,N,689,5318,1372,218,56,137,557,615,29,27,,,845,734,4.7900000000,40,9,22,4140,1479,157,609,580,170,178,0.97,Pittsburgh Pirates,Forbes Field,980590,102,106,PIT,PIT,PIT +1951,NL,SLN,STL,,3,155,79,81,73,,,N,N,683,5317,1404,230,57,95,569,492,30,30,,,671,609,3.9500000000,58,9,23,4161,1391,119,568,546,125,187,0.98,St. Louis Cardinals,Sportsman's Park IV,1013429,100,100,STL,SLN,SLN +1952,AL,BOS,BOS,,6,154,77,76,78,,,N,N,668,5246,1338,233,34,113,542,739,59,47,,,658,579,3.8000000000,53,7,24,4116,1332,107,623,624,143,181,0.97,Boston Red Sox,Fenway Park II,1115750,108,107,BOS,BOS,BOS +1952,AL,CHA,CHW,,3,156,79,81,73,,,N,N,610,5316,1337,199,38,80,541,521,61,38,,,568,511,3.2500000000,53,15,28,4248,1251,86,578,774,123,158,0.98,Chicago White Sox,Comiskey Park,1231675,101,99,CHW,CHA,CHA +1952,AL,CLE,CLE,,2,155,77,93,61,,,N,N,763,5330,1399,211,49,148,626,749,46,39,,,606,519,3.3200000000,80,19,18,4221,1278,94,556,671,155,141,0.97,Cleveland Indians,Cleveland Stadium,1444607,94,91,CLE,CLE,CLE +1952,AL,DET,DET,,8,156,77,50,104,,,N,N,557,5258,1278,190,37,103,553,605,27,38,,,738,655,4.2500000000,51,10,14,4164,1394,111,591,702,149,145,0.97,Detroit Tigers,Briggs Stadium,1026846,100,103,DET,DET,DET +1952,AL,NYA,NYY,,1,154,77,95,59,,,Y,Y,727,5294,1411,221,56,129,566,652,52,42,,,557,482,3.1400000000,72,21,27,4143,1240,94,581,666,127,199,0.97,New York Yankees,Yankee Stadium I,1629665,95,91,NYY,NYA,NYA +1952,AL,PHA,OAK,,4,155,78,79,75,,,N,N,664,5163,1305,212,35,89,683,561,52,43,,,723,638,4.1500000000,73,11,16,4152,1402,113,526,562,140,148,0.97,Philadelphia Athletics,Shibe Park,627100,106,108,PHA,PHA,PHA +1952,AL,SLA,BAL,,7,155,78,64,90,,,N,N,604,5353,1340,225,46,82,540,720,30,34,,,733,640,4.1200000000,48,6,18,4197,1388,111,598,581,155,176,0.97,St. Louis Browns,Sportsman's Park IV,518796,103,106,SLB,SLA,SLA +1952,AL,WS1,MIN,,5,157,78,78,76,,,N,N,598,5357,1282,225,44,50,580,607,48,37,,,608,535,3.3700000000,75,10,15,4287,1405,78,577,574,130,152,0.97,Washington Senators,Griffith Stadium I,699457,97,97,WSH,WS1,WS1 +1952,NL,BRO,LAD,,1,155,80,96,57,,,Y,N,775,5266,1380,199,32,153,663,699,90,49,,,603,549,3.5300000000,45,11,24,4197,1295,121,544,773,105,169,0.98,Brooklyn Dodgers,Ebbets Field,1088704,102,98,BRO,BRO,BRO +1952,NL,BSN,ATL,,7,155,77,64,89,,,N,N,569,5221,1214,187,31,110,483,711,58,34,,,651,586,3.7800000000,63,11,13,4188,1388,106,525,687,153,143,0.97,Boston Braves,Braves Field,281278,97,98,BSN,BSN,BSN +1952,NL,CHN,CHC,,5,155,77,77,77,,,N,N,628,5330,1408,223,45,107,422,712,50,40,,,631,551,3.5800000000,59,15,15,4158,1265,101,534,661,146,123,0.97,Chicago Cubs,Wrigley Field,1024826,101,103,CHC,CHN,CHN +1952,NL,CIN,CIN,,6,154,77,69,85,,,N,N,615,5234,1303,212,45,104,480,709,32,42,,,659,607,4.0100000000,56,11,12,4089,1377,111,517,579,107,145,0.98,Cincinnati Reds,Crosley Field,604197,99,100,CIN,CIN,CIN +1952,NL,NY1,SFG,,2,154,77,92,62,,,N,N,722,5229,1337,186,56,151,536,672,30,31,,,639,547,3.5900000000,49,12,31,4113,1282,121,538,655,153,175,0.97,New York Giants,Polo Grounds IV,984940,101,99,NYG,NY1,NY1 +1952,NL,PHI,PHI,,4,154,76,87,67,,,N,N,657,5205,1353,237,45,93,540,534,60,41,,,552,473,3.0700000000,80,17,16,4158,1306,95,373,609,150,145,0.97,Philadelphia Phillies,Shibe Park,755417,99,98,PHI,PHI,PHI +1952,NL,PIT,PIT,,8,155,77,42,112,,,N,N,515,5193,1201,181,30,92,486,724,43,41,,,793,704,4.6500000000,43,5,8,4089,1395,133,615,564,181,167,0.97,Pittsburgh Pirates,Forbes Field,686673,102,107,PIT,PIT,PIT +1952,NL,SLN,STL,,3,154,77,88,66,,,N,N,677,5200,1386,247,54,97,537,479,33,32,,,630,553,3.6600000000,49,12,27,4083,1274,119,501,712,141,159,0.97,St. Louis Cardinals,Sportsman's Park IV,913113,100,99,STL,SLN,SLN +1953,AL,BOS,BOS,,4,153,76,84,69,,,N,N,656,5246,1385,255,37,101,496,601,33,45,,,632,546,3.5800000000,41,15,37,4119,1333,92,584,642,147,173,0.97,Boston Red Sox,Fenway Park II,1026133,105,105,BOS,BOS,BOS +1953,AL,CHA,CHW,,3,156,78,89,65,,,N,N,716,5212,1345,226,53,74,601,530,73,55,,,592,532,3.4100000000,57,17,33,4209,1299,113,583,714,125,144,0.98,Chicago White Sox,Comiskey Park,1191353,103,101,CHW,CHA,CHA +1953,AL,CLE,CLE,,2,155,78,92,62,,,N,N,770,5285,1426,201,29,160,609,683,33,29,,,627,555,3.6400000000,81,11,15,4119,1311,92,519,586,126,197,0.97,Cleveland Indians,Cleveland Stadium,1069176,98,94,CLE,CLE,CLE +1953,AL,DET,DET,,6,158,79,60,94,,,N,N,695,5553,1479,259,44,108,506,603,30,35,,,923,825,5.2500000000,50,2,16,4245,1633,154,585,645,131,149,0.97,Detroit Tigers,Briggs Stadium,884658,98,102,DET,DET,DET +1953,AL,NYA,NYY,,1,151,77,99,52,,,Y,Y,801,5194,1420,226,52,139,656,644,34,44,,,547,483,3.2000000000,50,18,39,4074,1286,94,500,604,126,182,0.97,New York Yankees,Yankee Stadium I,1537811,97,93,NYY,NYA,NYA +1953,AL,PHA,OAK,,7,157,78,59,95,,,N,N,632,5455,1398,205,38,116,498,602,41,24,,,799,731,4.6700000000,51,7,11,4227,1475,121,594,566,136,161,0.97,Philadelphia Athletics,Connie Mack Stadium,362113,104,107,PHA,PHA,PHA +1953,AL,SLA,BAL,,8,154,77,54,100,,,N,N,555,5264,1310,214,25,112,507,644,17,34,,,778,688,4.4800000000,28,10,24,4149,1467,101,626,639,152,165,0.97,St. Louis Browns,Sportsman's Park IV,297238,102,106,SLB,SLA,SLA +1953,AL,WS1,MIN,,5,152,75,76,76,,,N,N,687,5149,1354,230,53,69,596,604,65,36,,,614,547,3.6600000000,76,16,10,4032,1313,112,478,515,120,173,0.97,Washington Senators,Griffith Stadium I,595594,98,98,WSH,WS1,WS1 +1953,NL,BRO,LAD,,1,155,78,105,49,,,Y,N,955,5373,1529,274,59,208,655,686,90,47,,,689,629,4.1000000000,51,11,29,4140,1337,169,509,817,118,161,0.98,Brooklyn Dodgers,Ebbets Field,1163419,103,100,BRO,BRO,BRO +1953,NL,CHN,CHC,,7,155,77,65,89,,,N,N,633,5272,1372,204,57,137,514,746,49,21,,,835,723,4.7900000000,38,3,22,4077,1491,151,554,623,193,141,0.96,Chicago Cubs,Wrigley Field,763658,102,103,CHC,CHN,CHN +1953,NL,CIN,CIN,,6,155,78,68,86,,,N,N,714,5343,1396,190,34,166,485,701,25,20,,,788,704,4.6400000000,47,7,15,4095,1484,179,488,506,129,176,0.97,Cincinnati Reds,Crosley Field,548086,100,101,CIN,CIN,CIN +1953,NL,ML1,ATL,,2,157,79,92,62,,,N,N,738,5349,1422,227,52,156,439,637,46,27,,,589,509,3.3000000000,72,14,15,4161,1282,107,539,738,143,169,0.97,Milwaukee Braves,County Stadium,1826397,94,92,MLN,MLN,MLN +1953,NL,NY1,SFG,,5,155,77,70,84,,,N,N,768,5362,1452,195,45,176,499,608,31,21,,,747,645,4.2500000000,46,10,20,4095,1403,146,610,647,150,151,0.97,New York Giants,Polo Grounds IV,811518,103,101,NYG,NY1,NY1 +1953,NL,PHI,PHI,,3,156,78,83,71,,,N,N,716,5290,1400,228,62,115,530,597,42,21,,,666,578,3.8000000000,76,13,15,4107,1410,138,410,637,147,161,0.97,Philadelphia Phillies,Connie Mack Stadium,853644,99,98,PHI,PHI,PHI +1953,NL,PIT,PIT,,8,154,77,50,104,,,N,N,622,5253,1297,178,49,99,524,715,41,39,,,887,788,5.2200000000,49,4,10,4074,1529,168,577,607,163,139,0.97,Pittsburgh Pirates,Forbes Field,572757,99,104,PIT,PIT,PIT +1953,NL,SLN,STL,,3,157,78,83,71,,,N,N,768,5397,1474,281,56,140,574,617,18,22,,,713,651,4.2300000000,51,11,36,4158,1406,139,533,732,138,161,0.97,St. Louis Cardinals,Sportsman's Park IV,880242,100,99,STL,SLN,SLN +1954,AL,BAL,BAL,,7,154,77,54,100,,,N,N,483,5206,1309,195,49,52,468,634,30,31,,,668,592,3.8800000000,58,6,8,4119,1279,78,688,668,147,152,0.97,Baltimore Orioles,Memorial Stadium,1060910,92,96,BAL,BAL,BAL +1954,AL,BOS,BOS,,4,156,79,69,85,,,N,N,700,5399,1436,244,41,123,654,660,51,30,,,728,629,4.0100000000,41,10,22,4236,1434,118,612,707,176,163,0.97,Boston Red Sox,Fenway Park II,931127,111,110,BOS,BOS,BOS +1954,AL,CHA,CHW,,3,155,78,94,60,,,N,N,711,5168,1382,203,47,94,604,536,98,58,,,521,469,3.0500000000,60,23,33,4149,1255,94,517,701,108,149,0.98,Chicago White Sox,Comiskey Park,1231629,103,100,CHW,CHA,CHA +1954,AL,CLE,CLE,,1,156,77,111,43,,,Y,N,746,5222,1368,188,39,156,637,668,30,33,,,504,438,2.7800000000,77,12,36,4257,1220,89,486,678,128,148,0.97,Cleveland Indians,Cleveland Stadium,1335472,102,98,CLE,CLE,CLE +1954,AL,DET,DET,,5,155,77,68,86,,,N,N,584,5233,1351,215,41,90,492,603,48,44,,,664,585,3.8100000000,58,13,13,4149,1375,138,506,603,127,131,0.97,Detroit Tigers,Briggs Stadium,1079847,99,100,DET,DET,DET +1954,AL,NYA,NYY,,2,155,78,103,51,,,N,N,805,5226,1400,215,59,133,650,632,34,41,,,563,500,3.2600000000,51,16,37,4137,1284,86,552,655,127,198,0.97,New York Yankees,Yankee Stadium I,1475171,97,93,NYY,NYA,NYA +1954,AL,PHA,OAK,,8,156,77,51,103,,,N,N,542,5206,1228,191,41,94,504,677,30,29,,,875,789,5.1800000000,49,3,13,4113,1523,141,685,555,166,163,0.97,Philadelphia Athletics,Connie Mack Stadium,304666,100,105,PHA,PHA,PHA +1954,AL,WS1,MIN,,6,155,78,66,88,,,N,N,632,5249,1292,188,69,81,610,719,37,21,,,680,590,3.8400000000,69,10,7,4149,1396,79,573,562,137,172,0.97,Washington Senators,Griffith Stadium I,503542,94,96,WSH,WS1,WS1 +1954,NL,BRO,LAD,,2,154,77,92,62,,,N,N,778,5251,1418,246,56,186,634,625,46,39,,,740,667,4.3100000000,39,8,36,4179,1399,164,533,762,129,138,0.97,Brooklyn Dodgers,Ebbets Field,1020531,104,101,BRO,BRO,BRO +1954,NL,CHN,CHC,,7,154,77,64,90,,,N,N,700,5359,1412,229,45,159,478,693,46,31,,,766,689,4.5100000000,41,6,19,4122,1375,131,619,622,154,164,0.97,Chicago Cubs,Wrigley Field,748183,101,103,CHC,CHN,CHN +1954,NL,CIN,CIN,,5,154,77,74,80,,,N,N,729,5234,1369,221,46,147,557,645,47,30,,,763,684,4.5000000000,34,8,27,4101,1491,169,547,537,137,194,0.97,Cincinnati Redlegs,Crosley Field,704167,102,103,CIN,CIN,CIN +1954,NL,ML1,ATL,,3,154,77,89,65,,,N,N,670,5261,1395,217,41,139,471,619,54,31,,,556,494,3.1900000000,63,13,21,4182,1296,106,553,698,116,171,0.98,Milwaukee Braves,County Stadium,2131388,94,92,MLN,MLN,MLN +1954,NL,NY1,SFG,,1,154,76,97,57,,,Y,Y,732,5245,1386,194,42,186,522,561,30,23,,,550,477,3.0900000000,45,19,33,4170,1258,113,613,692,154,172,0.97,New York Giants,Polo Grounds IV,1155067,101,100,NYG,NY1,NY1 +1954,NL,PHI,PHI,,4,154,78,75,79,,,N,N,659,5184,1384,243,58,102,604,620,30,27,,,614,544,3.5900000000,78,14,12,4095,1329,133,450,570,145,133,0.97,Philadelphia Phillies,Connie Mack Stadium,738991,100,99,PHI,PHI,PHI +1954,NL,PIT,PIT,,8,154,77,53,101,,,N,N,557,5088,1260,181,57,76,566,737,21,13,,,845,736,4.9200000000,37,4,15,4038,1510,128,564,525,173,136,0.97,Pittsburgh Pirates,Forbes Field,475494,98,102,PIT,PIT,PIT +1954,NL,SLN,STL,,6,154,77,72,82,,,N,N,799,5405,1518,285,58,119,582,586,63,46,,,790,695,4.5000000000,40,11,18,4170,1484,170,535,680,146,178,0.97,St. Louis Cardinals,Sportsman's Park IV,1039698,100,101,STL,SLN,SLN +1955,AL,BAL,BAL,,7,156,79,57,97,,,N,N,540,5257,1263,177,39,54,560,742,34,46,,,754,649,4.2100000000,35,10,20,4164,1403,103,625,595,162,159,0.97,Baltimore Orioles,Memorial Stadium,852039,92,96,BAL,BAL,BAL +1955,AL,BOS,BOS,,4,154,78,84,70,,,N,N,755,5273,1392,241,39,137,707,733,43,17,,,652,572,3.7200000000,44,9,34,4152,1333,128,582,674,136,140,0.97,Boston Red Sox,Fenway Park II,1203200,110,109,BOS,BOS,BOS +1955,AL,CHA,CHW,,3,155,77,91,63,,,N,N,725,5220,1401,204,36,116,567,595,69,45,,,557,516,3.3700000000,55,20,23,4134,1301,111,497,720,111,147,0.98,Chicago White Sox,Comiskey Park,1175684,103,99,CHW,CHA,CHA +1955,AL,CLE,CLE,,2,154,77,93,61,,,N,N,698,5146,1325,195,31,148,723,715,28,24,,,601,522,3.3900000000,45,15,36,4158,1285,111,558,877,108,152,0.98,Cleveland Indians,Cleveland Stadium,1221780,104,101,CLE,CLE,CLE +1955,AL,DET,DET,,5,154,77,79,75,,,N,N,775,5283,1407,211,38,130,641,583,41,22,,,658,581,3.7900000000,66,16,12,4140,1381,126,517,629,139,159,0.97,Detroit Tigers,Briggs Stadium,1181838,98,98,DET,DET,DET +1955,AL,KC1,OAK,,6,155,76,63,91,,,N,N,638,5335,1395,189,46,121,463,725,22,36,,,911,822,5.3500000000,29,9,22,4146,1486,175,707,572,146,174,0.97,Kansas City Athletics,Municipal Stadium I,1393054,100,105,KCA,KC1,KC1 +1955,AL,NYA,NYY,,1,154,77,96,58,,,Y,N,762,5161,1342,179,55,175,609,658,55,25,,,569,492,3.2300000000,52,19,33,4116,1163,108,688,731,128,180,0.97,New York Yankees,Yankee Stadium I,1490138,99,95,NYY,NYA,NYA +1955,AL,WS1,MIN,,8,154,77,53,101,,,N,N,598,5142,1277,178,54,80,538,654,25,32,,,789,695,4.6200000000,37,10,16,4062,1450,99,634,607,154,170,0.97,Washington Senators,Griffith Stadium I,425238,97,100,WSH,WS1,WS1 +1955,NL,BRO,LAD,,1,154,77,98,55,,,Y,Y,857,5193,1406,230,44,201,674,718,79,56,,,650,563,3.6800000000,46,11,37,4134,1296,168,483,773,133,156,0.97,Brooklyn Dodgers,Ebbets Field,1033589,104,101,BRO,BRO,BRO +1955,NL,CHN,CHC,,6,154,77,72,81,,,N,N,626,5214,1287,187,55,164,428,806,37,35,,,713,638,4.1700000000,47,10,23,4134,1306,153,601,686,147,147,0.97,Chicago Cubs,Wrigley Field,875800,100,102,CHC,CHN,CHN +1955,NL,CIN,CIN,,5,154,77,75,79,,,N,N,761,5270,1424,216,28,181,556,657,51,36,,,684,598,3.9500000000,38,12,22,4089,1373,161,443,576,139,169,0.97,Cincinnati Redlegs,Crosley Field,693662,105,104,CIN,CIN,CIN +1955,NL,ML1,ATL,,2,154,77,85,69,,,N,N,743,5277,1377,219,55,182,504,735,42,27,,,668,592,3.8500000000,61,5,12,4149,1339,138,591,654,152,155,0.97,Milwaukee Braves,County Stadium,2005836,96,93,MLN,MLN,MLN +1955,NL,NY1,SFG,,3,154,79,80,74,,,N,N,702,5288,1377,173,34,169,497,581,38,22,,,673,581,3.7700000000,52,6,14,4158,1347,155,560,721,141,165,0.97,New York Giants,Polo Grounds IV,824112,101,101,NYG,NY1,NY1 +1955,NL,PHI,PHI,,4,154,77,77,77,,,N,N,675,5092,1300,214,50,132,652,673,44,32,,,666,592,3.9300000000,58,11,21,4068,1291,161,477,657,110,117,0.98,Philadelphia Phillies,Connie Mack Stadium,922886,98,98,PHI,PHI,PHI +1955,NL,PIT,PIT,,8,154,75,60,94,,,N,N,560,5173,1262,210,60,91,471,652,22,22,,,767,664,4.3900000000,41,5,16,4086,1480,142,536,622,166,175,0.97,Pittsburgh Pirates,Forbes Field,469397,98,101,PIT,PIT,PIT +1955,NL,SLN,STL,,7,154,77,68,86,,,N,N,654,5266,1375,228,36,143,458,597,64,59,,,757,697,4.5600000000,42,10,15,4128,1376,185,549,730,146,152,0.97,St. Louis Cardinals,Sportsman's Park IV,849130,99,100,STL,SLN,SLN +1956,AL,BAL,BAL,,6,154,77,69,85,,,N,N,571,5090,1242,198,34,91,563,725,39,42,,,705,635,4.2000000000,38,10,24,4080,1362,99,547,715,133,142,0.97,Baltimore Orioles,Memorial Stadium,901201,92,94,BAL,BAL,BAL +1956,AL,BOS,BOS,,4,155,78,84,70,,,N,N,780,5349,1473,261,45,139,727,687,28,19,,,751,648,4.1700000000,50,8,20,4194,1354,130,668,712,169,168,0.97,Boston Red Sox,Fenway Park II,1137158,113,111,BOS,BOS,BOS +1956,AL,CHA,CHW,,3,154,77,85,69,,,N,N,776,5286,1412,218,43,128,619,660,70,33,,,634,576,3.7300000000,65,11,13,4167,1351,118,524,722,122,160,0.97,Chicago White Sox,Comiskey Park,1000090,101,99,CHW,CHA,CHA +1956,AL,CLE,CLE,,2,155,77,88,66,,,N,N,712,5148,1256,199,23,153,681,764,40,32,,,581,511,3.3200000000,67,17,24,4152,1233,116,564,845,129,130,0.97,Cleveland Indians,Cleveland Stadium,865467,103,101,CLE,CLE,CLE +1956,AL,DET,DET,,5,155,78,82,72,,,N,N,789,5364,1494,209,50,150,644,618,43,26,,,699,622,4.0600000000,62,10,15,4137,1389,140,655,788,140,151,0.97,Detroit Tigers,Briggs Stadium,1051182,101,100,DET,DET,DET +1956,AL,KC1,OAK,,8,154,77,52,102,,,N,N,619,5256,1325,204,41,112,480,727,40,30,,,831,740,4.8600000000,30,3,18,4110,1424,187,679,636,166,187,0.97,Kansas City Athletics,Municipal Stadium I,1015154,100,104,KCA,KC1,KC1 +1956,AL,NYA,NYY,,1,154,77,97,57,,,Y,Y,857,5312,1433,193,55,190,615,755,51,37,,,631,557,3.6300000000,50,10,35,4146,1285,114,652,732,135,214,0.97,New York Yankees,Yankee Stadium I,1491784,97,93,NYY,NYA,NYA +1956,AL,WS1,MIN,,7,155,77,59,95,,,N,N,652,5202,1302,198,62,112,690,877,37,34,,,924,810,5.3300000000,36,1,18,4104,1539,171,730,663,168,173,0.97,Washington Senators,Griffith Stadium II,431647,96,100,WSH,WS1,WS1 +1956,NL,BRO,LAD,,1,154,77,93,61,,,Y,N,720,5098,1315,212,36,179,649,738,65,37,,,601,543,3.5700000000,46,12,30,4104,1251,171,441,772,111,149,0.98,Brooklyn Dodgers,Ebbets Field,1213562,109,107,BRO,BRO,BRO +1956,NL,CHN,CHC,,8,157,80,60,94,,,N,N,597,5260,1281,202,50,142,446,776,55,38,,,708,612,3.9600000000,37,6,17,4176,1325,161,613,744,143,141,0.97,Chicago Cubs,Wrigley Field,720118,99,101,CHC,CHN,CHN +1956,NL,CIN,CIN,,3,155,77,91,63,,,N,N,775,5291,1406,201,32,221,528,760,45,22,,,658,594,3.8500000000,47,4,29,4167,1406,141,458,653,113,147,0.98,Cincinnati Redlegs,Crosley Field,1125928,106,105,CIN,CIN,CIN +1956,NL,ML1,ATL,,2,155,77,92,62,,,N,N,709,5207,1350,212,54,177,486,714,29,20,,,569,481,3.1100000000,64,12,27,4179,1295,133,467,639,130,159,0.97,Milwaukee Braves,County Stadium,2046331,94,92,MLN,MLN,MLN +1956,NL,NY1,SFG,,6,154,77,67,87,,,N,N,540,5190,1268,192,45,145,402,659,67,34,,,650,579,3.7800000000,31,9,28,4134,1287,144,551,765,144,143,0.97,New York Giants,Polo Grounds IV,629179,99,100,NYG,NY1,NY1 +1956,NL,PHI,PHI,,5,154,77,71,83,,,N,N,668,5204,1313,207,49,121,585,673,45,23,,,738,643,4.2000000000,57,4,15,4131,1407,172,437,750,144,140,0.97,Philadelphia Phillies,Connie Mack Stadium,934798,98,99,PHI,PHI,PHI +1956,NL,PIT,PIT,,7,157,78,66,88,,,N,N,588,5221,1340,199,57,110,383,752,24,33,,,653,572,3.7400000000,37,8,24,4128,1406,142,469,662,162,140,0.97,Pittsburgh Pirates,Forbes Field,949878,97,100,PIT,PIT,PIT +1956,NL,SLN,STL,,4,156,78,76,78,,,N,N,678,5378,1443,234,49,124,503,622,41,35,,,698,612,3.9700000000,41,12,30,4164,1339,155,546,709,134,172,0.97,St. Louis Cardinals,Sportsman's Park IV,1029773,100,100,STL,SLN,SLN +1957,AL,BAL,BAL,,5,154,77,76,76,,,N,N,597,5264,1326,191,39,87,504,699,57,35,,,588,541,3.4600000000,44,13,25,4224,1272,95,493,767,109,159,0.98,Baltimore Orioles,Memorial Stadium,1029581,93,94,BAL,BAL,BAL +1957,AL,BOS,BOS,,3,154,77,82,72,,,N,N,721,5267,1380,231,32,153,624,739,29,21,,,668,593,3.8800000000,55,9,23,4128,1391,116,498,692,149,179,0.97,Boston Red Sox,Fenway Park II,1181087,106,105,BOS,BOS,BOS +1957,AL,CHA,CHW,,2,155,77,90,64,,,N,N,707,5265,1369,208,41,106,633,745,109,51,,,566,521,3.3500000000,59,16,27,4203,1305,124,470,665,107,169,0.98,Chicago White Sox,Comiskey Park,1135668,101,99,CHW,CHA,CHA +1957,AL,CLE,CLE,,6,153,77,76,77,,,N,N,682,5171,1304,199,26,140,591,786,40,47,,,722,623,4.0600000000,46,7,23,4140,1381,130,618,807,147,154,0.97,Cleveland Indians,Cleveland Stadium,722256,100,99,CLE,CLE,CLE +1957,AL,DET,DET,,4,154,77,78,76,,,N,N,614,5348,1376,224,37,116,504,643,36,47,,,614,561,3.5600000000,52,9,21,4251,1330,147,505,756,121,151,0.98,Detroit Tigers,Briggs Stadium,1272346,103,102,DET,DET,DET +1957,AL,KC1,OAK,,7,154,77,59,94,,,N,N,563,5170,1262,195,40,166,364,760,35,27,,,710,637,4.1900000000,26,6,19,4107,1344,153,565,626,125,162,0.97,Kansas City Athletics,Municipal Stadium I,901067,101,104,KCA,KC1,KC1 +1957,AL,NYA,NYY,,1,154,77,98,56,,,Y,N,723,5271,1412,200,54,145,562,709,49,38,,,534,465,3.0000000000,41,13,42,4185,1198,110,580,810,123,183,0.98,New York Yankees,Yankee Stadium I,1497134,99,95,NYY,NYA,NYA +1957,AL,WS1,MIN,,8,154,77,55,99,,,N,N,603,5231,1274,215,38,111,527,733,13,38,,,808,742,4.8500000000,31,5,16,4131,1482,149,580,691,128,159,0.97,Washington Senators,Griffith Stadium II,457079,98,102,WSH,WS1,WS1 +1957,NL,BRO,LAD,,3,154,77,84,70,,,N,N,690,5242,1325,188,38,147,550,848,60,34,,,591,521,3.3500000000,44,18,29,4197,1285,144,456,891,127,136,0.97,Brooklyn Dodgers,Ebbets Field,1028258,109,107,BRO,BRO,BRO +1957,NL,CHN,CHC,,7,156,78,62,92,,,N,N,628,5369,1312,223,31,147,461,989,28,25,,,722,644,4.1300000000,30,5,26,4209,1397,144,601,859,137,140,0.97,Chicago Cubs,Wrigley Field,670629,99,100,CHC,CHN,CHN +1957,NL,CIN,CIN,,4,154,77,80,74,,,N,N,747,5389,1452,251,33,187,546,752,51,36,,,781,716,4.6200000000,40,5,29,4185,1486,179,429,707,107,139,0.98,Cincinnati Redlegs,Crosley Field,1070850,106,105,CIN,CIN,CIN +1957,NL,ML1,ATL,,1,155,78,95,59,,,Y,Y,772,5458,1469,221,62,199,461,729,35,16,,,613,544,3.4700000000,60,9,24,4233,1347,124,570,693,120,173,0.98,Milwaukee Braves,County Stadium,2215404,93,90,MLN,MLN,MLN +1957,NL,NY1,SFG,,6,154,77,69,85,,,N,N,643,5346,1349,171,54,157,447,669,64,38,,,701,623,4.0100000000,35,9,20,4194,1436,150,471,701,161,180,0.97,New York Giants,Polo Grounds IV,653923,100,102,NYG,NY1,NY1 +1957,NL,PHI,PHI,,5,156,78,77,77,,,N,N,623,5241,1311,213,44,117,534,758,57,26,,,656,590,3.7900000000,54,9,23,4203,1363,139,412,858,136,117,0.97,Philadelphia Phillies,Connie Mack Stadium,1146230,97,98,PHI,PHI,PHI +1957,NL,PIT,PIT,,7,155,77,62,92,,,N,N,586,5402,1447,231,60,92,374,733,46,35,,,696,601,3.8800000000,47,9,15,4185,1463,158,421,663,170,143,0.97,Pittsburgh Pirates,Forbes Field,850732,97,98,PIT,PIT,PIT +1957,NL,SLN,STL,,2,154,77,87,67,,,N,N,737,5472,1497,235,43,132,493,672,58,44,,,666,593,3.7800000000,46,11,29,4239,1385,140,506,778,131,168,0.97,St. Louis Cardinals,Sportsman's Park IV,1183575,102,102,STL,SLN,SLN +1958,AL,BAL,BAL,,6,154,78,74,79,,,N,N,521,5111,1233,195,19,108,483,731,33,35,,,575,517,3.4000000000,55,15,28,4107,1277,106,403,749,114,159,0.98,Baltimore Orioles,Memorial Stadium,829991,94,95,BAL,BAL,BAL +1958,AL,BOS,BOS,,3,155,77,79,75,,,N,N,697,5218,1335,229,30,155,638,820,29,22,,,691,601,3.9200000000,44,5,28,4140,1396,121,521,695,145,172,0.97,Boston Red Sox,Fenway Park II,1077047,106,106,BOS,BOS,BOS +1958,AL,CHA,CHW,,2,155,77,82,72,,,N,N,634,5249,1348,191,42,101,518,669,101,33,,,615,557,3.6100000000,55,15,25,4167,1296,152,515,751,113,160,0.98,Chicago White Sox,Comiskey Park,797451,99,97,CHW,CHA,CHA +1958,AL,CLE,CLE,,4,153,76,77,76,,,N,N,694,5201,1340,210,31,161,494,819,50,49,,,635,569,3.7300000000,51,2,20,4119,1283,123,604,766,152,171,0.97,Cleveland Indians,Cleveland Stadium,663805,99,98,CLE,CLE,CLE +1958,AL,DET,DET,,5,154,77,77,77,,,N,N,659,5194,1384,229,41,109,463,678,48,32,,,606,541,3.5900000000,59,8,19,4071,1294,133,437,797,106,140,0.98,Detroit Tigers,Briggs Stadium,1098924,107,107,DET,DET,DET +1958,AL,KC1,OAK,,7,156,78,73,81,,,N,N,642,5261,1297,196,50,138,452,747,22,36,,,713,645,4.1500000000,42,9,25,4194,1405,150,467,721,125,166,0.97,Kansas City Athletics,Municipal Stadium I,925090,102,104,KCA,KC1,KC1 +1958,AL,NYA,NYY,,1,155,78,92,62,,,Y,Y,759,5294,1418,212,39,164,537,822,48,32,,,577,493,3.2200000000,53,21,33,4137,1201,116,557,796,128,182,0.97,New York Yankees,Yankee Stadium I,1428438,96,94,NYY,NYA,NYA +1958,AL,WS1,MIN,,8,156,78,61,93,,,N,N,553,5156,1240,161,38,121,477,751,22,41,,,747,693,4.5300000000,28,6,28,4128,1443,156,558,762,118,163,0.98,Washington Senators,Griffith Stadium II,475288,98,101,WSH,WS1,WS1 +1958,NL,CHN,CHC,,5,154,77,72,82,,,N,N,709,5289,1402,207,49,182,487,853,39,23,,,725,638,4.2200000000,27,5,24,4083,1322,142,619,805,150,161,0.97,Chicago Cubs,Wrigley Field,979904,98,99,CHC,CHN,CHN +1958,NL,CIN,CIN,,4,154,77,76,78,,,N,N,695,5273,1359,242,40,123,572,765,61,38,,,621,574,3.7300000000,50,7,20,4155,1422,148,419,705,99,148,0.98,Cincinnati Redlegs,Crosley Field,788582,106,105,CIN,CIN,CIN +1958,NL,LAN,LAD,,7,154,77,71,83,,,N,N,668,5173,1297,166,50,172,495,850,73,47,,,761,679,4.4700000000,30,7,31,4104,1399,173,606,855,145,198,0.97,Los Angeles Dodgers,Los Angeles Memorial Coliseum,1845556,104,104,LAD,LAN,LAN +1958,NL,ML1,ATL,,1,154,77,92,62,,,Y,N,675,5225,1388,221,21,167,478,646,26,8,,,541,491,3.2100000000,72,16,17,4128,1261,125,426,773,119,152,0.98,Milwaukee Braves,County Stadium,1971101,92,89,MLN,MLN,MLN +1958,NL,PHI,PHI,,8,154,77,69,85,,,N,N,664,5363,1424,238,56,124,573,871,51,33,,,762,671,4.3200000000,51,6,15,4191,1480,148,446,778,129,136,0.97,Philadelphia Phillies,Connie Mack Stadium,931110,99,100,PHI,PHI,PHI +1958,NL,PIT,PIT,,2,154,77,84,70,,,N,N,662,5247,1386,229,68,134,396,753,30,15,,,607,541,3.5600000000,43,10,41,4101,1344,123,470,679,133,173,0.97,Pittsburgh Pirates,Forbes Field,1311988,97,98,PIT,PIT,PIT +1958,NL,SFN,SFG,,3,154,77,80,74,,,N,N,727,5318,1399,250,42,170,531,817,64,29,,,698,614,3.9800000000,38,7,25,4167,1400,166,512,775,152,156,0.97,San Francisco Giants,Seals Stadium,1272625,98,96,SFG,SFN,SFN +1958,NL,SLN,STL,,5,154,77,72,82,,,N,N,619,5255,1371,216,39,111,533,637,44,43,,,704,632,4.1200000000,45,6,25,4143,1398,158,567,822,152,163,0.97,St. Louis Cardinals,Sportsman's Park IV,1063730,104,105,STL,SLN,SLN +1959,AL,BAL,BAL,,6,155,78,74,80,,,N,N,551,5208,1240,182,23,109,536,690,36,24,,,621,554,3.5600000000,45,15,30,4200,1290,111,476,735,147,163,0.97,Baltimore Orioles,Memorial Stadium,891926,97,98,BAL,BAL,BAL +1959,AL,BOS,BOS,,5,154,77,75,79,,,N,N,726,5225,1335,248,28,125,626,810,68,25,,,696,632,4.1700000000,38,9,25,4092,1386,135,589,724,130,167,0.97,Boston Red Sox,Fenway Park II,984102,104,104,BOS,BOS,BOS +1959,AL,CHA,CHW,,1,156,78,94,60,,,Y,N,669,5297,1325,220,46,97,580,634,113,53,,,588,521,3.2900000000,44,13,36,4275,1297,129,525,761,130,141,0.97,Chicago White Sox,Comiskey Park,1423144,99,98,CHW,CHA,CHA +1959,AL,CLE,CLE,,2,154,77,89,65,,,N,N,745,5288,1390,216,25,167,433,721,33,36,,,646,576,3.7500000000,58,7,23,4149,1230,148,635,799,127,138,0.97,Cleveland Indians,Cleveland Stadium,1497976,97,96,CLE,CLE,CLE +1959,AL,DET,DET,,4,154,77,76,78,,,N,N,713,5211,1346,196,30,160,580,737,34,17,,,732,635,4.2000000000,53,9,24,4080,1327,177,432,829,124,131,0.97,Detroit Tigers,Briggs Stadium,1221221,106,105,DET,DET,DET +1959,AL,KC1,OAK,,7,154,77,66,88,,,N,N,681,5264,1383,231,43,117,481,780,34,24,,,760,657,4.3500000000,44,8,21,4080,1452,148,492,703,159,156,0.97,Kansas City Athletics,Municipal Stadium I,963683,102,104,KCA,KC1,KC1 +1959,AL,NYA,NYY,,3,155,77,79,75,,,N,N,687,5379,1397,224,40,153,457,828,45,22,,,647,560,3.6000000000,38,15,28,4197,1281,120,594,836,131,160,0.97,New York Yankees,Yankee Stadium I,1552030,96,94,NYY,NYA,NYA +1959,AL,WS1,MIN,,8,154,77,63,91,,,N,N,619,5092,1205,173,32,163,517,881,51,34,,,701,606,4.0100000000,46,10,21,4080,1358,123,467,694,162,140,0.97,Washington Senators,Griffith Stadium II,615372,100,102,WSH,WS1,WS1 +1959,NL,CHN,CHC,,5,155,77,74,80,,,N,N,673,5296,1321,209,44,163,498,911,32,19,,,688,620,4.0100000000,30,11,25,4173,1337,152,519,765,140,142,0.97,Chicago Cubs,Wrigley Field,858255,99,100,CHC,CHN,CHN +1959,NL,CIN,CIN,,5,154,77,74,80,,,N,N,764,5288,1448,258,34,161,499,763,65,28,,,738,650,4.3100000000,44,7,26,4071,1460,162,456,690,126,157,0.97,Cincinnati Redlegs,Crosley Field,801298,104,103,CIN,CIN,CIN +1959,NL,LAN,LAD,,1,156,78,88,68,,,Y,Y,705,5282,1360,196,46,148,591,891,84,51,,,670,594,3.7900000000,43,14,26,4233,1317,157,614,1077,114,154,0.98,Los Angeles Dodgers,Los Angeles Memorial Coliseum,2071045,107,107,LAD,LAN,LAN +1959,NL,ML1,ATL,,2,157,79,86,70,,,N,N,724,5388,1426,216,36,177,488,765,41,14,,,623,546,3.5100000000,69,18,18,4200,1406,128,429,775,123,138,0.97,Milwaukee Braves,County Stadium,1749112,92,90,MLN,MLN,MLN +1959,NL,PHI,PHI,,8,155,78,64,90,,,N,N,599,5109,1237,196,38,113,498,858,39,46,,,725,642,4.2700000000,54,8,15,4062,1357,150,474,769,154,132,0.97,Philadelphia Phillies,Connie Mack Stadium,802815,101,104,PHI,PHI,PHI +1959,NL,PIT,PIT,,4,155,77,78,76,,,N,N,651,5369,1414,230,42,112,442,715,32,26,,,680,604,3.9000000000,48,7,17,4179,1432,134,418,730,154,165,0.97,Pittsburgh Pirates,Forbes Field,1359917,99,98,PIT,PIT,PIT +1959,NL,SFN,SFG,,3,154,77,83,71,,,N,N,705,5281,1377,239,35,167,473,875,81,34,,,613,531,3.4700000000,52,12,23,4128,1279,139,500,873,152,118,0.97,San Francisco Giants,Seals Stadium,1422130,98,96,SFG,SFN,SFN +1959,NL,SLN,STL,,7,154,77,71,83,,,N,N,641,5317,1432,244,49,118,485,747,65,53,,,725,657,4.3400000000,36,8,21,4089,1427,137,564,846,146,158,0.97,St. Louis Cardinals,Sportsman's Park IV,929953,106,107,STL,SLN,SLN +1960,AL,BAL,BAL,,2,154,77,89,65,,,N,N,682,5170,1307,206,33,123,596,801,37,24,,,606,538,3.5200000000,48,11,22,4125,1222,117,552,785,107,172,0.98,Baltimore Orioles,Memorial Stadium,1187849,99,98,BAL,BAL,BAL +1960,AL,BOS,BOS,,7,154,77,65,89,,,N,N,658,5215,1359,234,32,124,570,798,34,28,,,775,699,4.6200000000,34,6,23,4083,1440,127,580,767,140,156,0.97,Boston Red Sox,Fenway Park II,1129866,103,103,BOS,BOS,BOS +1960,AL,CHA,CHW,,3,154,77,87,67,,,N,N,741,5191,1402,242,38,112,567,648,122,48,,,617,552,3.6000000000,42,11,26,4143,1338,127,533,695,109,175,0.98,Chicago White Sox,Comiskey Park,1644460,100,98,CHW,CHA,CHA +1960,AL,CLE,CLE,,4,154,77,76,78,,,N,N,667,5296,1415,218,20,127,444,573,58,25,,,693,607,3.9500000000,32,10,30,4146,1308,161,636,771,126,165,0.97,Cleveland Indians,Cleveland Stadium,950985,97,97,CLE,CLE,CLE +1960,AL,DET,DET,,6,154,77,71,83,,,N,N,633,5202,1243,188,34,150,636,728,66,32,,,644,568,3.6400000000,40,7,25,4215,1336,141,474,824,137,138,0.97,Detroit Tigers,Briggs Stadium,1167669,103,103,DET,DET,DET +1960,AL,KC1,OAK,,8,155,78,58,96,,,N,N,615,5226,1303,212,34,110,513,744,16,11,,,756,669,4.3800000000,44,4,14,4122,1428,160,525,664,127,149,0.97,Kansas City Athletics,Municipal Stadium I,774944,100,103,KCA,KC1,KC1 +1960,AL,NYA,NYY,,1,155,77,97,57,,,Y,N,746,5290,1377,215,40,193,537,818,37,23,,,627,547,3.5200000000,38,16,42,4194,1225,123,609,712,129,162,0.97,New York Yankees,Yankee Stadium I,1627349,94,92,NYY,NYA,NYA +1960,AL,WS1,MIN,,5,154,77,73,81,,,N,N,672,5248,1283,205,43,147,584,883,52,43,,,696,589,3.7700000000,34,10,35,4215,1392,130,538,775,165,159,0.97,Washington Senators,Griffith Stadium II,743404,101,102,WSH,WS1,WS1 +1960,NL,CHN,CHC,,7,156,79,60,94,,,N,N,634,5311,1293,213,48,119,531,897,51,34,,,776,678,4.3500000000,36,6,25,4206,1393,152,565,805,143,133,0.97,Chicago Cubs,Wrigley Field,809770,99,100,CHC,CHN,CHN +1960,NL,CIN,CIN,,6,154,77,67,87,,,N,N,640,5289,1324,230,40,140,512,858,73,37,,,692,618,4.0000000000,33,8,35,4170,1417,134,442,740,125,155,0.97,Cincinnati Reds,Crosley Field,663486,102,102,CIN,CIN,CIN +1960,NL,LAN,LAD,,4,154,77,82,72,,,N,N,662,5227,1333,216,38,126,529,837,95,53,,,593,528,3.4000000000,46,13,20,4194,1218,154,564,1122,124,142,0.97,Los Angeles Dodgers,Los Angeles Memorial Coliseum,2253887,106,105,LAD,LAN,LAN +1960,NL,ML1,ATL,,2,154,77,88,66,,,N,N,724,5263,1393,198,48,170,463,793,69,37,,,658,579,3.7600000000,55,13,28,4161,1327,130,518,807,139,137,0.97,Milwaukee Braves,County Stadium,1497799,93,91,MLN,MLN,MLN +1960,NL,PHI,PHI,,8,154,77,59,95,,,N,N,546,5169,1235,196,44,99,448,1054,45,48,,,691,613,4.0100000000,45,6,16,4125,1423,133,439,736,155,129,0.97,Philadelphia Phillies,Connie Mack Stadium,862205,100,103,PHI,PHI,PHI +1960,NL,PIT,PIT,,1,155,78,95,59,,,Y,Y,734,5406,1493,236,56,120,486,747,34,24,,,593,543,3.4900000000,47,11,33,4197,1363,105,386,811,128,163,0.97,Pittsburgh Pirates,Forbes Field,1705828,101,100,PIT,PIT,PIT +1960,NL,SFN,SFG,,5,156,77,79,75,,,N,N,671,5324,1357,220,62,130,467,846,86,45,,,631,534,3.4400000000,55,16,26,4188,1288,107,512,897,165,117,0.97,San Francisco Giants,Candlestick Park,1795356,95,93,SFG,SFN,SFN +1960,NL,SLN,STL,,3,155,77,86,68,,,N,N,639,5187,1317,213,48,138,501,792,48,35,,,616,554,3.6400000000,37,11,30,4113,1316,127,511,906,141,152,0.97,St. Louis Cardinals,Sportsman's Park IV,1096632,108,109,STL,SLN,SLN +1961,AL,BAL,BAL,,3,163,82,95,67,,,N,N,691,5481,1393,227,36,149,581,902,39,30,,,588,526,3.2200000000,54,21,33,4413,1226,109,617,926,126,173,0.98,Baltimore Orioles,Memorial Stadium,951089,96,96,BAL,BAL,BAL +1961,AL,BOS,BOS,,6,163,82,76,86,,,N,N,729,5508,1401,251,37,112,647,847,56,36,,,792,687,4.2900000000,35,6,30,4326,1472,167,679,831,143,140,0.97,Boston Red Sox,Fenway Park II,850589,102,103,BOS,BOS,BOS +1961,AL,CHA,CHW,,4,163,81,86,76,,,N,N,765,5556,1475,216,46,138,550,612,100,40,,,726,653,4.0600000000,39,3,33,4344,1491,158,498,814,128,138,0.98,Chicago White Sox,Comiskey Park,1146019,99,97,CHW,CHA,CHA +1961,AL,CLE,CLE,,5,161,81,78,83,,,N,N,737,5609,1493,257,39,150,492,720,34,11,,,752,665,4.1500000000,35,12,23,4329,1426,178,599,801,139,142,0.97,Cleveland Indians,Cleveland Stadium,725547,97,98,CLE,CLE,CLE +1961,AL,DET,DET,,2,163,82,101,61,,,N,N,841,5561,1481,215,53,180,673,867,98,36,,,671,575,3.5500000000,62,12,30,4377,1404,170,469,836,146,147,0.97,Detroit Tigers,Tiger Stadium,1600710,103,102,DET,DET,DET +1961,AL,KC1,OAK,,9,162,80,61,100,,,N,N,683,5423,1342,216,47,90,580,772,58,22,,,863,745,4.7400000000,32,5,23,4245,1519,141,629,703,174,160,0.97,Kansas City Athletics,Municipal Stadium I,683817,101,103,KCA,KC1,KC1 +1961,AL,LAA,ANA,,8,162,82,70,91,,,N,N,744,5424,1331,218,22,189,681,1068,37,28,,,784,689,4.3100000000,25,5,34,4314,1391,180,713,973,192,154,0.96,Los Angeles Angels,Wrigley Field (LA),603510,111,112,LAA,LAA,LAA +1961,AL,MIN,MIN,,7,161,81,70,90,,,N,N,707,5417,1353,215,40,167,597,840,47,43,,,778,681,4.2800000000,49,14,23,4296,1415,163,570,914,174,150,0.97,Minnesota Twins,Metropolitan Stadium,1256723,106,106,MIN,MIN,MIN +1961,AL,NYA,NYY,,1,163,81,109,53,,,Y,Y,827,5559,1461,194,40,240,543,785,28,18,,,612,558,3.4600000000,47,14,39,4353,1288,137,542,866,124,180,0.98,New York Yankees,Yankee Stadium I,1747725,95,93,NYY,NYA,NYA +1961,AL,WS2,TEX,,9,161,79,61,100,,,N,N,618,5366,1307,217,44,119,558,917,81,47,,,776,670,4.2300000000,39,8,21,4275,1405,131,586,666,156,171,0.97,Washington Senators,Griffith Stadium II,597287,95,97,WSA,WS2,WS2 +1961,NL,CHN,CHC,,7,156,78,64,90,,,N,N,689,5344,1364,238,51,176,539,1027,35,25,,,800,689,4.4800000000,34,6,25,4155,1492,165,465,755,183,175,0.97,Chicago Cubs,Wrigley Field,673057,101,104,CHC,CHN,CHN +1961,NL,CIN,CIN,,1,154,77,93,61,,,Y,N,710,5243,1414,247,35,158,423,761,70,33,,,653,575,3.7800000000,46,12,40,4110,1300,147,500,829,134,124,0.97,Cincinnati Reds,Crosley Field,1117603,102,101,CIN,CIN,CIN +1961,NL,LAN,LAD,,2,154,77,89,65,,,N,N,735,5189,1358,193,40,157,596,796,86,45,,,697,619,4.0400000000,40,10,35,4134,1346,167,544,1105,136,162,0.97,Los Angeles Dodgers,Los Angeles Memorial Coliseum,1804250,108,107,LAD,LAN,LAN +1961,NL,ML1,ATL,,4,155,77,83,71,,,N,N,712,5288,1365,199,34,188,534,880,70,43,,,656,601,3.8900000000,57,8,16,4173,1357,153,493,652,111,152,0.98,Milwaukee Braves,County Stadium,1101441,94,92,MLN,MLN,MLN +1961,NL,PHI,PHI,,8,155,78,47,107,,,N,N,584,5213,1265,185,50,103,475,928,56,30,,,796,708,4.6100000000,29,9,13,4149,1452,155,521,775,144,179,0.97,Philadelphia Phillies,Connie Mack Stadium,590039,98,101,PHI,PHI,PHI +1961,NL,PIT,PIT,,6,154,77,75,79,,,N,N,694,5311,1448,232,57,128,428,721,26,30,,,675,593,3.9200000000,34,9,29,4086,1442,121,400,759,150,189,0.97,Pittsburgh Pirates,Forbes Field,1199128,101,99,PIT,PIT,PIT +1961,NL,SFN,SFG,,3,155,77,85,69,,,N,N,773,5233,1379,219,32,183,506,764,79,54,,,655,581,3.7700000000,39,9,30,4164,1306,152,502,924,133,126,0.97,San Francisco Giants,Candlestick Park,1390679,97,95,SFG,SFN,SFN +1961,NL,SLN,STL,,5,155,78,80,74,,,N,N,703,5307,1436,236,51,103,494,745,46,28,,,668,568,3.7400000000,49,10,24,4104,1334,136,570,823,166,165,0.97,St. Louis Cardinals,Sportsman's Park IV,855305,110,110,STL,SLN,SLN +1962,AL,BAL,BAL,,7,162,82,77,85,,,N,N,652,5491,1363,225,34,156,516,931,45,32,,,680,599,3.6900000000,32,8,33,4386,1373,147,549,898,122,152,0.98,Baltimore Orioles,Memorial Stadium,790254,94,93,BAL,BAL,BAL +1962,AL,BOS,BOS,,8,160,79,76,84,,,N,N,707,5530,1429,257,53,146,525,923,39,33,,,756,674,4.2200000000,34,12,40,4311,1416,159,632,923,128,152,0.97,Boston Red Sox,Fenway Park II,733080,103,104,BOS,BOS,BOS +1962,AL,CHA,CHW,,5,162,81,85,77,,,N,N,707,5514,1415,250,56,92,620,674,76,40,,,658,601,3.7300000000,50,13,28,4353,1380,123,537,821,110,153,0.98,Chicago White Sox,Comiskey Park,1131562,100,99,CHW,CHA,CHA +1962,AL,CLE,CLE,,6,162,81,80,82,,,N,N,682,5484,1341,202,22,180,502,939,35,16,,,745,663,4.1400000000,45,12,31,4323,1410,174,594,780,139,168,0.97,Cleveland Indians,Cleveland Stadium,716076,97,97,CLE,CLE,CLE +1962,AL,DET,DET,,4,161,82,85,76,,,N,N,758,5456,1352,191,36,209,651,894,69,21,,,692,611,3.8100000000,46,8,35,4329,1452,169,503,873,156,114,0.97,Detroit Tigers,Tiger Stadium,1207881,103,102,DET,DET,DET +1962,AL,KC1,OAK,,9,162,81,72,90,,,N,N,745,5576,1467,220,58,116,556,803,76,21,,,837,763,4.7900000000,32,4,33,4302,1450,199,655,825,132,131,0.97,Kansas City Athletics,Municipal Stadium I,635675,104,106,KCA,KC1,KC1 +1962,AL,LAA,ANA,,3,162,81,86,76,,,N,N,718,5499,1377,232,35,137,602,917,46,27,,,706,603,3.7000000000,23,15,47,4398,1412,118,616,858,175,153,0.97,Los Angeles Angels,Dodger Stadium,1144063,97,97,LAA,LAA,LAA +1962,AL,MIN,MIN,,2,163,82,91,71,,,N,N,798,5561,1445,215,39,185,649,823,33,20,,,713,632,3.8900000000,53,11,27,4389,1400,166,493,948,129,173,0.97,Minnesota Twins,Metropolitan Stadium,1433116,104,103,MIN,MIN,MIN +1962,AL,NYA,NYY,,1,162,80,96,66,,,Y,Y,817,5644,1509,240,29,199,584,842,42,29,,,680,604,3.7000000000,33,10,42,4410,1375,146,499,838,131,151,0.97,New York Yankees,Yankee Stadium I,1493574,97,95,NYY,NYA,NYA +1962,AL,WS2,TEX,,10,162,80,60,101,,,N,N,599,5484,1370,206,38,132,466,789,99,53,,,716,649,4.0400000000,38,11,13,4335,1400,151,593,771,139,160,0.97,Washington Senators,R.F.K. Stadium,729775,100,102,WSA,WS2,WS2 +1962,NL,CHN,CHC,,9,162,81,59,103,,,N,N,632,5534,1398,196,56,126,504,1044,78,50,,,827,725,4.5400000000,29,4,26,4314,1509,159,601,783,146,171,0.97,Chicago Cubs,Wrigley Field,609802,104,105,CHC,CHN,CHN +1962,NL,CIN,CIN,,3,162,81,98,64,,,N,N,802,5645,1523,252,40,167,498,903,66,39,,,685,608,3.7500000000,51,13,35,4380,1397,149,567,964,143,144,0.97,Cincinnati Reds,Crosley Field,982095,104,102,CIN,CIN,CIN +1962,NL,HOU,HOU,,8,162,82,64,96,,,N,N,592,5558,1370,170,47,105,493,806,42,30,,,717,618,3.8300000000,34,9,19,4359,1446,113,471,1047,173,149,0.97,Houston Colt .45's,Colt Stadium,924456,93,95,HOU,HOU,HOU +1962,NL,LAN,LAD,,2,165,83,102,63,,,N,N,842,5628,1510,192,65,140,572,886,198,43,,,697,599,3.6200000000,44,8,46,4464,1386,115,588,1104,191,144,0.97,Los Angeles Dodgers,Dodger Stadium,2755184,93,91,LAD,LAN,LAN +1962,NL,ML1,ATL,,5,162,81,86,76,,,N,N,730,5458,1376,204,38,181,581,975,57,27,,,665,586,3.6800000000,59,10,24,4302,1443,151,407,802,123,154,0.98,Milwaukee Braves,County Stadium,766921,97,96,MLN,MLN,MLN +1962,NL,NYN,NYM,,10,161,80,40,120,,,N,N,617,5492,1318,166,40,139,616,991,59,48,,,948,801,5.0400000000,43,4,10,4290,1577,192,571,772,210,167,0.96,New York Mets,Polo Grounds IV,922530,100,105,NYM,NYN,NYN +1962,NL,PHI,PHI,,7,161,80,81,80,,,N,N,705,5420,1410,199,39,142,531,923,79,42,,,759,678,4.2800000000,43,7,24,4278,1469,155,574,863,138,167,0.97,Philadelphia Phillies,Connie Mack Stadium,762034,97,98,PHI,PHI,PHI +1962,NL,PIT,PIT,,4,161,81,93,68,,,N,N,706,5483,1468,240,65,108,432,836,50,39,,,626,536,3.3700000000,40,13,41,4296,1433,118,466,897,152,177,0.97,Pittsburgh Pirates,Forbes Field,1090648,101,100,PIT,PIT,PIT +1962,NL,SFN,SFG,,1,165,82,103,62,,,Y,N,878,5588,1552,235,32,204,523,822,73,50,,,690,615,3.7900000000,62,10,39,4383,1399,148,503,886,142,153,0.97,San Francisco Giants,Candlestick Park,1592594,99,96,SFG,SFN,SFN +1962,NL,SLN,STL,,6,163,81,84,78,,,N,N,774,5643,1528,221,31,137,515,846,86,41,,,664,577,3.5500000000,53,17,25,4389,1394,149,517,914,132,170,0.97,St. Louis Cardinals,Sportsman's Park IV,953895,111,109,STL,SLN,SLN +1963,AL,BAL,BAL,,4,162,81,86,76,,,N,N,644,5448,1359,207,32,146,469,940,97,34,,,621,557,3.4500000000,35,8,43,4356,1353,137,507,913,99,157,0.98,Baltimore Orioles,Memorial Stadium,774343,96,95,BAL,BAL,BAL +1963,AL,BOS,BOS,,7,161,80,76,85,,,N,N,666,5575,1403,247,34,171,475,954,27,16,,,704,639,3.9700000000,29,7,32,4347,1367,152,539,1009,132,119,0.97,Boston Red Sox,Fenway Park II,942642,103,104,BOS,BOS,BOS +1963,AL,CHA,CHW,,2,162,82,94,68,,,N,N,683,5508,1379,208,40,114,571,896,64,28,,,544,485,2.9700000000,49,21,39,4407,1311,100,440,932,130,163,0.97,Chicago White Sox,Comiskey Park,1158848,98,96,CHW,CHA,CHA +1963,AL,CLE,CLE,,5,162,81,79,83,,,N,N,635,5496,1314,214,29,169,469,1102,59,36,,,702,619,3.7900000000,40,14,25,4407,1390,176,478,1018,143,129,0.97,Cleveland Indians,Cleveland Stadium,562507,100,100,CLE,CLE,CLE +1963,AL,DET,DET,,5,162,81,79,83,,,N,N,700,5500,1388,195,36,148,592,908,73,32,,,703,631,3.9000000000,42,7,28,4368,1407,195,477,930,113,124,0.98,Detroit Tigers,Tiger Stadium,821952,103,103,DET,DET,DET +1963,AL,KC1,OAK,,8,162,81,73,89,,,N,N,615,5495,1356,225,38,95,529,829,47,26,,,704,635,3.9200000000,35,11,29,4374,1417,156,540,887,124,131,0.98,Kansas City Athletics,Municipal Stadium I,762364,106,108,KCA,KC1,KC1 +1963,AL,LAA,ANA,,9,161,81,70,91,,,N,N,597,5506,1378,208,38,95,448,916,43,30,,,660,569,3.5200000000,30,13,31,4365,1317,120,578,889,163,155,0.97,Los Angeles Angels,Dodger Stadium,821015,94,94,LAA,LAA,LAA +1963,AL,MIN,MIN,,3,161,81,91,70,,,N,N,767,5531,1408,223,35,225,547,912,32,14,,,602,527,3.2800000000,58,13,30,4338,1322,162,459,941,144,140,0.97,Minnesota Twins,Metropolitan Stadium,1406652,102,101,MIN,MIN,MIN +1963,AL,NYA,NYY,,1,161,80,104,57,,,Y,N,714,5506,1387,197,35,188,434,808,42,26,,,547,494,3.0700000000,59,19,31,4347,1239,115,476,965,108,162,0.98,New York Yankees,Yankee Stadium I,1308920,100,97,NYY,NYA,NYA +1963,AL,WS2,TEX,,10,162,80,56,106,,,N,N,578,5446,1237,190,35,138,497,963,68,28,,,812,711,4.4200000000,29,8,25,4341,1486,176,537,744,182,165,0.97,Washington Senators,R.F.K. Stadium,535604,100,103,WSA,WS2,WS2 +1963,NL,CHN,CHC,,7,162,81,82,80,,,N,N,570,5404,1286,205,44,127,439,1049,68,60,,,578,499,3.0800000000,45,15,28,4371,1357,119,400,851,155,172,0.97,Chicago Cubs,Wrigley Field,979551,106,107,CHC,CHN,CHN +1963,NL,CIN,CIN,,5,162,81,86,76,,,N,N,648,5416,1333,225,44,122,474,960,92,58,,,594,526,3.2900000000,55,22,36,4317,1307,117,425,1048,135,127,0.97,Cincinnati Reds,Crosley Field,858805,103,102,CIN,CIN,CIN +1963,NL,HOU,HOU,,9,162,81,66,96,,,N,N,464,5384,1184,170,39,62,456,938,39,30,,,640,554,3.4400000000,36,16,20,4350,1341,95,378,937,162,100,0.97,Houston Colt .45's,Colt Stadium,719502,94,96,HOU,HOU,HOU +1963,NL,LAN,LAD,,1,163,81,99,63,,,Y,Y,640,5428,1361,178,34,110,453,867,124,70,,,550,465,2.8500000000,51,24,29,4407,1329,111,402,1095,158,129,0.97,Los Angeles Dodgers,Dodger Stadium,2538602,93,91,LAD,LAN,LAN +1963,NL,ML1,ATL,,6,163,82,84,78,,,N,N,677,5518,1345,204,39,139,525,954,75,52,,,603,534,3.2700000000,56,18,25,4413,1327,149,489,924,129,161,0.98,Milwaukee Braves,County Stadium,773018,99,98,MLN,MLN,MLN +1963,NL,NYN,NYM,,10,162,81,51,111,,,N,N,501,5336,1168,156,35,96,457,1078,41,52,,,774,653,4.1200000000,42,5,12,4281,1452,162,529,806,208,151,0.96,New York Mets,Polo Grounds IV,1080108,100,105,NYM,NYN,NYN +1963,NL,PHI,PHI,,4,162,81,87,75,,,N,N,642,5524,1390,228,54,126,403,955,56,39,,,578,500,3.0900000000,45,12,31,4371,1262,113,553,1052,142,147,0.97,Philadelphia Phillies,Connie Mack Stadium,907141,99,99,PHI,PHI,PHI +1963,NL,PIT,PIT,,8,162,81,74,88,,,N,N,567,5536,1385,181,49,108,454,940,57,41,,,595,499,3.1000000000,34,16,33,4344,1350,99,457,900,182,195,0.97,Pittsburgh Pirates,Forbes Field,783648,101,100,PIT,PIT,PIT +1963,NL,SFN,SFG,,3,162,81,88,74,,,N,N,725,5579,1442,206,35,197,441,889,55,49,,,641,547,3.3500000000,46,9,30,4407,1380,126,464,954,156,113,0.97,San Francisco Giants,Candlestick Park,1571306,99,97,SFG,SFN,SFN +1963,NL,SLN,STL,,2,162,81,93,69,,,N,N,747,5678,1540,231,66,128,458,915,77,42,,,628,540,3.3200000000,49,17,32,4389,1329,124,463,978,147,136,0.97,St. Louis Cardinals,Sportsman's Park IV,1170546,110,109,STL,SLN,SLN +1964,AL,BAL,BAL,,3,163,82,97,65,,,N,N,679,5463,1357,229,20,162,537,1019,78,38,,,567,512,3.1600000000,44,17,41,4374,1292,129,456,939,95,159,0.98,Baltimore Orioles,Memorial Stadium,1116215,100,99,BAL,BAL,BAL +1964,AL,BOS,BOS,,8,162,81,72,90,,,N,N,688,5513,1425,253,29,186,504,917,18,16,,,793,711,4.5000000000,21,9,38,4266,1464,178,571,1094,136,123,0.97,Boston Red Sox,Fenway Park II,883276,105,106,BOS,BOS,BOS +1964,AL,CHA,CHW,,2,162,81,98,64,,,N,N,642,5491,1356,184,40,106,562,902,75,39,,,501,443,2.7200000000,44,20,45,4401,1216,124,401,955,122,164,0.98,Chicago White Sox,Comiskey Park,1250053,97,95,CHW,CHA,CHA +1964,AL,CLE,CLE,,6,164,82,79,83,,,N,N,689,5603,1386,208,22,164,500,1063,79,51,,,693,620,3.7500000000,37,16,37,4461,1443,154,565,1162,118,149,0.98,Cleveland Indians,Cleveland Stadium,653293,99,99,CLE,CLE,CLE +1964,AL,DET,DET,,4,163,82,85,77,,,N,N,699,5513,1394,199,57,157,517,912,60,27,,,678,620,3.8400000000,35,11,35,4359,1343,164,536,993,109,137,0.98,Detroit Tigers,Tiger Stadium,816139,102,101,DET,DET,DET +1964,AL,KC1,OAK,,10,163,81,57,105,,,N,N,621,5524,1321,216,29,166,548,1104,34,20,,,836,761,4.7100000000,18,6,27,4365,1516,220,614,966,154,152,0.97,Kansas City Athletics,Municipal Stadium I,642478,104,106,KCA,KC1,KC1 +1964,AL,LAA,ANA,,5,162,81,82,80,,,N,N,544,5362,1297,186,27,102,472,920,49,39,,,551,469,2.9100000000,30,28,41,4350,1273,100,530,965,138,168,0.97,Los Angeles Angels,Dodger Stadium,760439,90,90,LAA,LAA,LAA +1964,AL,MIN,MIN,,6,163,82,79,83,,,N,N,737,5610,1413,227,46,221,553,1019,46,22,,,678,588,3.5800000000,47,4,29,4431,1361,181,545,1099,145,131,0.97,Minnesota Twins,Metropolitan Stadium,1207514,101,99,MIN,MIN,MIN +1964,AL,NYA,NYY,,1,164,81,99,63,,,Y,N,730,5705,1442,208,35,162,520,976,54,18,,,577,527,3.1500000000,46,18,45,4518,1312,129,504,989,107,158,0.98,New York Yankees,Yankee Stadium I,1305638,101,100,NYY,NYA,NYA +1964,AL,WS2,TEX,,9,162,81,62,100,,,N,N,578,5396,1246,199,28,125,514,1124,47,30,,,733,635,3.9800000000,27,5,26,4305,1417,172,505,794,127,145,0.97,Washington Senators,R.F.K. Stadium,600106,100,102,WSA,WS2,WS2 +1964,NL,CHN,CHC,,8,162,81,76,86,,,N,N,649,5545,1391,239,50,145,499,1041,70,49,,,724,655,4.0800000000,58,11,19,4335,1510,144,423,737,162,147,0.97,Chicago Cubs,Wrigley Field,751647,104,105,CHC,CHN,CHN +1964,NL,CIN,CIN,,2,163,82,92,70,,,N,N,660,5561,1383,220,38,130,457,974,90,36,,,566,500,3.0700000000,54,14,35,4401,1306,112,436,1122,130,137,0.97,Cincinnati Reds,Crosley Field,862466,103,102,CIN,CIN,CIN +1964,NL,HOU,HOU,,9,162,81,66,96,,,N,N,495,5303,1214,162,41,70,381,872,40,48,,,628,541,3.4100000000,30,9,31,4284,1421,105,353,852,149,124,0.97,Houston Colt .45's,Colt Stadium,725773,95,97,HOU,HOU,HOU +1964,NL,LAN,LAD,,6,164,81,80,82,,,N,N,614,5499,1375,180,39,79,438,893,141,60,,,572,486,2.9500000000,47,19,27,4449,1289,88,458,1062,170,126,0.97,Los Angeles Dodgers,Dodger Stadium,2228751,93,92,LAD,LAN,LAN +1964,NL,ML1,ATL,,5,162,81,88,74,,,N,N,803,5591,1522,274,32,159,486,825,53,41,,,744,656,4.1200000000,45,14,39,4302,1411,160,452,906,143,139,0.97,Milwaukee Braves,County Stadium,910911,101,100,MLN,MLN,MLN +1964,NL,NYN,NYM,,10,163,82,53,109,,,N,N,569,5566,1372,195,31,103,353,932,36,31,,,776,679,4.2500000000,40,10,15,4314,1511,130,466,717,166,154,0.97,New York Mets,Shea Stadium,1732597,97,100,NYM,NYN,NYN +1964,NL,PHI,PHI,,2,162,81,92,70,,,N,N,693,5493,1415,241,51,130,440,924,30,35,,,632,545,3.3600000000,37,17,41,4383,1402,129,440,1009,156,150,0.97,Philadelphia Phillies,Connie Mack Stadium,1425891,99,98,PHI,PHI,PHI +1964,NL,PIT,PIT,,6,162,81,80,82,,,N,N,663,5566,1469,225,54,121,408,970,39,33,,,636,564,3.5200000000,42,14,29,4329,1429,92,476,951,177,179,0.97,Pittsburgh Pirates,Forbes Field,759496,100,99,PIT,PIT,PIT +1964,NL,SFN,SFG,,4,162,81,90,72,,,N,N,656,5535,1360,185,38,165,505,900,64,35,,,587,523,3.1900000000,48,17,30,4428,1348,118,480,1023,159,136,0.97,San Francisco Giants,Candlestick Park,1504364,102,101,SFG,SFN,SFN +1964,NL,SLN,STL,,1,162,81,93,69,,,Y,Y,715,5625,1531,240,53,109,427,925,73,51,,,652,551,3.4300000000,47,10,38,4335,1405,133,410,877,172,147,0.97,St. Louis Cardinals,Sportsman's Park IV,1143294,109,108,STL,SLN,SLN +1965,AL,BAL,BAL,,3,162,79,94,68,,,N,N,641,5450,1299,227,38,125,529,907,67,31,,,578,489,2.9800000000,32,15,41,4431,1268,120,510,939,126,152,0.98,Baltimore Orioles,Memorial Stadium,781649,102,101,BAL,BAL,BAL +1965,AL,BOS,BOS,,9,162,81,62,100,,,N,N,669,5487,1378,244,40,165,607,964,47,24,,,791,678,4.2400000000,33,9,25,4317,1443,158,543,993,159,129,0.97,Boston Red Sox,Fenway Park II,652201,106,108,BOS,BOS,BOS +1965,AL,CAL,ANA,,7,162,80,75,87,,,N,N,527,5354,1279,200,36,92,443,973,107,59,,,569,508,3.1700000000,39,14,33,4323,1259,91,563,847,123,149,0.98,California Angels,Dodger Stadium,566727,97,98,CAL,CAL,CAL +1965,AL,CHA,CHW,,2,162,81,95,67,,,N,N,647,5509,1354,200,38,125,533,916,50,33,,,555,492,2.9900000000,21,14,53,4443,1261,122,460,946,126,156,0.98,Chicago White Sox,Comiskey Park,1130519,93,92,CHW,CHA,CHA +1965,AL,CLE,CLE,,5,162,82,87,75,,,N,N,663,5469,1367,198,21,156,506,857,109,46,,,613,535,3.3000000000,41,13,41,4374,1254,129,500,1156,114,127,0.98,Cleveland Indians,Cleveland Stadium,934786,101,101,CLE,CLE,CLE +1965,AL,DET,DET,,4,162,81,89,73,,,N,N,680,5368,1278,190,27,162,554,952,57,41,,,602,542,3.3500000000,45,14,31,4365,1283,137,509,1069,114,126,0.98,Detroit Tigers,Tiger Stadium,1029645,102,101,DET,DET,DET +1965,AL,KC1,OAK,,10,162,81,59,103,,,N,N,585,5393,1294,186,59,110,521,1020,110,51,,,755,675,4.2400000000,18,7,32,4299,1399,161,574,882,139,142,0.97,Kansas City Athletics,Municipal Stadium I,528344,99,101,KCA,KC1,KC1 +1965,AL,MIN,MIN,,1,162,81,102,60,,,Y,N,774,5488,1396,257,42,150,554,969,92,33,,,600,508,3.1400000000,32,12,45,4371,1278,166,503,934,172,158,0.97,Minnesota Twins,Metropolitan Stadium,1463258,105,103,MIN,MIN,MIN +1965,AL,NYA,NYY,,6,162,83,77,85,,,N,N,611,5470,1286,196,31,149,489,951,35,20,,,604,532,3.2800000000,41,11,31,4377,1337,126,511,1001,137,166,0.97,New York Yankees,Yankee Stadium I,1213552,99,98,NYY,NYA,NYA +1965,AL,WS2,TEX,,8,162,81,70,92,,,N,N,591,5374,1227,179,33,136,570,1125,30,19,,,721,627,3.9300000000,21,8,40,4305,1376,160,633,867,143,148,0.97,Washington Senators,R.F.K. Stadium,560083,98,100,WSA,WS2,WS2 +1965,NL,CHN,CHC,,8,164,83,72,90,,,N,N,635,5540,1316,202,33,134,532,948,65,47,,,723,618,3.7800000000,33,9,35,4416,1470,154,481,855,171,166,0.97,Chicago Cubs,Wrigley Field,641361,102,104,CHC,CHN,CHN +1965,NL,CIN,CIN,,4,162,81,89,73,,,N,N,825,5658,1544,268,61,183,538,1003,82,40,,,704,628,3.8800000000,43,9,34,4371,1355,136,587,1113,117,142,0.98,Cincinnati Reds,Crosley Field,1047824,107,106,CIN,CIN,CIN +1965,NL,HOU,HOU,,9,162,81,65,97,,,N,N,569,5483,1299,188,42,97,502,877,90,37,,,711,623,3.8400000000,29,7,26,4383,1459,123,388,931,166,130,0.97,Houston Astros,Astrodome,2151470,92,94,HOU,HOU,HOU +1965,NL,LAN,LAD,,1,162,81,97,65,,,Y,Y,608,5425,1329,193,32,78,492,891,172,77,,,521,461,2.8100000000,58,23,34,4428,1223,127,425,1079,134,135,0.97,Los Angeles Dodgers,Dodger Stadium,2553577,93,92,LAD,LAN,LAN +1965,NL,ML1,ATL,,5,162,81,86,76,,,N,N,708,5542,1419,243,28,196,408,976,64,37,,,633,566,3.5200000000,43,4,38,4341,1336,123,541,966,140,145,0.97,Milwaukee Braves,County Stadium,555584,101,99,MLN,MLN,MLN +1965,NL,NYN,NYM,,10,164,82,50,112,,,N,N,495,5441,1202,203,27,107,392,1129,28,42,,,752,656,4.0600000000,29,11,14,4362,1462,147,498,776,169,153,0.97,New York Mets,Shea Stadium,1768389,96,99,NYM,NYN,NYN +1965,NL,PHI,PHI,,6,162,80,85,76,,,N,N,654,5528,1380,205,53,144,494,1091,46,32,,,667,576,3.5300000000,50,18,21,4404,1426,116,466,1071,157,153,0.97,Philadelphia Phillies,Connie Mack Stadium,1166376,98,98,PHI,PHI,PHI +1965,NL,PIT,PIT,,3,163,82,90,72,,,N,N,675,5686,1506,217,57,111,419,1008,51,38,,,580,495,3.0100000000,49,17,27,4437,1324,89,469,882,152,189,0.97,Pittsburgh Pirates,Forbes Field,909279,101,99,PIT,PIT,PIT +1965,NL,SFN,SFG,,2,163,81,95,67,,,N,N,682,5495,1384,169,43,159,476,844,47,27,,,593,521,3.2000000000,42,17,42,4395,1325,137,408,1060,148,124,0.97,San Francisco Giants,Candlestick Park,1546075,104,102,SFG,SFN,SFN +1965,NL,SLN,STL,,7,162,81,80,81,,,N,N,707,5579,1415,234,46,109,477,882,100,52,,,674,612,3.7700000000,40,11,35,4383,1414,166,467,916,130,152,0.97,St. Louis Cardinals,Sportsman's Park IV,1241201,110,109,STL,SLN,SLN +1966,AL,BAL,BAL,,1,160,79,97,63,,,Y,Y,755,5529,1426,243,35,175,514,926,55,43,,,601,541,3.3200000000,23,13,51,4398,1267,127,514,1070,115,142,0.98,Baltimore Orioles,Memorial Stadium,1203366,99,98,BAL,BAL,BAL +1966,AL,BOS,BOS,,9,162,81,72,90,,,N,N,655,5498,1318,228,44,145,542,1020,35,24,,,731,637,3.9200000000,32,10,31,4389,1402,164,577,977,153,153,0.97,Boston Red Sox,Fenway Park II,811172,111,112,BOS,BOS,BOS +1966,AL,CAL,ANA,,6,162,81,80,82,,,N,N,604,5360,1244,179,54,122,525,1062,80,54,,,643,576,3.5600000000,31,12,40,4371,1364,136,511,836,136,186,0.97,California Angels,Anaheim Stadium,1400321,97,97,CAL,CAL,CAL +1966,AL,CHA,CHW,,4,163,81,83,79,,,N,N,574,5348,1235,193,40,87,476,872,153,78,,,517,439,2.6800000000,38,22,34,4425,1229,101,403,896,160,149,0.97,Chicago White Sox,Comiskey Park,990016,93,92,CHW,CHA,CHA +1966,AL,CLE,CLE,,5,162,81,81,81,,,N,N,574,5474,1300,156,25,155,450,914,53,41,,,586,526,3.2300000000,49,15,28,4401,1260,129,489,1111,138,132,0.97,Cleveland Indians,Cleveland Stadium,903359,100,100,CLE,CLE,CLE +1966,AL,DET,DET,,3,162,81,88,74,,,N,N,719,5507,1383,224,45,179,551,987,41,34,,,698,622,3.8500000000,36,11,38,4362,1356,185,520,1026,117,142,0.98,Detroit Tigers,Tiger Stadium,1124293,103,102,DET,DET,DET +1966,AL,KC1,OAK,,7,160,81,74,86,,,N,N,564,5328,1259,212,56,70,421,982,132,50,,,648,568,3.5600000000,19,11,47,4305,1281,106,630,854,139,154,0.97,Kansas City Athletics,Municipal Stadium I,773929,97,99,KCA,KC1,KC1 +1966,AL,MIN,MIN,,2,162,81,89,73,,,N,N,663,5390,1341,219,33,144,513,844,67,42,,,581,500,3.1300000000,52,11,28,4314,1246,139,392,1015,139,118,0.97,Minnesota Twins,Metropolitan Stadium,1259374,107,105,MIN,MIN,MIN +1966,AL,NYA,NYY,,10,160,82,70,89,,,N,N,611,5330,1254,182,36,162,485,817,49,29,,,612,536,3.4100000000,29,7,32,4245,1318,124,443,842,142,142,0.97,New York Yankees,Yankee Stadium I,1124648,95,96,NYY,NYA,NYA +1966,AL,WS2,TEX,,8,159,78,71,88,,,N,N,557,5318,1245,185,40,126,450,1069,53,37,,,659,583,3.7000000000,25,6,35,4257,1282,154,448,866,142,139,0.97,Washington Senators,R.F.K. Stadium,576260,99,101,WSA,WS2,WS2 +1966,NL,ATL,ATL,,5,163,82,85,77,,,N,N,782,5617,1476,220,32,207,512,913,59,47,,,683,601,3.6800000000,37,10,36,4407,1430,129,485,884,154,139,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1539801,103,102,ATL,ATL,ATL +1966,NL,CHN,CHC,,10,162,81,59,103,,,N,N,644,5592,1418,203,43,140,457,998,76,47,,,809,701,4.3300000000,28,6,24,4374,1513,184,479,908,166,132,0.97,Chicago Cubs,Wrigley Field,635891,101,102,CHC,CHN,CHN +1966,NL,CIN,CIN,,7,160,79,76,84,,,N,N,692,5521,1434,232,33,149,394,877,70,50,,,702,651,4.0800000000,28,10,35,4308,1408,153,490,1043,122,133,0.98,Cincinnati Reds,Crosley Field,742958,110,109,CIN,CIN,CIN +1966,NL,HOU,HOU,,8,163,81,72,90,,,N,N,612,5511,1405,203,35,112,491,885,90,47,,,695,603,3.7600000000,34,13,26,4329,1468,130,391,929,174,126,0.97,Houston Astros,Astrodome,1872108,93,94,HOU,HOU,HOU +1966,NL,LAN,LAD,,1,162,81,95,67,,,Y,N,606,5471,1399,201,27,108,430,830,94,64,,,490,424,2.6200000000,52,20,35,4374,1287,84,356,1084,133,128,0.97,Los Angeles Dodgers,Dodger Stadium,2617029,92,91,LAD,LAN,LAN +1966,NL,NYN,NYM,,9,161,81,66,95,,,N,N,587,5371,1286,187,35,98,446,992,55,46,,,761,661,4.1700000000,37,9,22,4281,1497,166,521,773,159,171,0.97,New York Mets,Shea Stadium,1932693,97,100,NYM,NYN,NYN +1966,NL,PHI,PHI,,4,162,81,87,75,,,N,N,696,5607,1448,224,49,117,510,969,56,42,,,640,579,3.5700000000,52,15,23,4377,1439,137,412,928,113,147,0.98,Philadelphia Phillies,Connie Mack Stadium,1108201,100,99,PHI,PHI,PHI +1966,NL,PIT,PIT,,3,162,81,92,70,,,N,N,759,5676,1586,238,66,158,405,1011,64,60,,,641,572,3.5200000000,35,12,43,4389,1445,125,463,898,141,215,0.97,Pittsburgh Pirates,Forbes Field,1196618,100,99,PIT,PIT,PIT +1966,NL,SFN,SFG,,2,161,81,93,68,,,N,N,675,5539,1373,195,31,181,414,860,29,30,,,626,531,3.2400000000,52,14,27,4428,1370,140,359,973,168,131,0.97,San Francisco Giants,Candlestick Park,1657192,104,103,SFG,SFN,SFN +1966,NL,SLN,STL,,6,162,81,83,79,,,N,N,571,5480,1377,196,61,108,345,977,144,61,,,577,504,3.1100000000,47,19,32,4377,1345,130,448,892,145,166,0.97,St. Louis Cardinals,Sportsman's Park IV/Busch Stadium II,1712980,100,100,STL,SLN,SLN +1967,AL,BAL,BAL,,6,161,77,76,85,,,N,N,654,5456,1312,215,44,138,531,1002,54,37,,,592,537,3.3200000000,29,17,36,4371,1218,116,566,1034,124,144,0.98,Baltimore Orioles,Memorial Stadium,955053,100,98,BAL,BAL,BAL +1967,AL,BOS,BOS,,1,162,81,92,70,,,Y,N,722,5471,1394,216,39,158,522,1020,68,59,,,614,545,3.3600000000,41,9,44,4377,1307,142,477,1010,142,142,0.97,Boston Red Sox,Fenway Park II,1727832,109,109,BOS,BOS,BOS +1967,AL,CAL,ANA,,5,161,83,84,77,,,N,N,567,5307,1265,170,37,114,453,1021,40,36,,,587,507,3.1900000000,19,14,46,4290,1246,118,525,892,111,135,0.98,California Angels,Anaheim Stadium,1317713,95,96,CAL,CAL,CAL +1967,AL,CHA,CHW,,4,162,82,89,73,,,N,N,531,5383,1209,181,34,89,480,849,124,82,,,491,406,2.4500000000,36,24,39,4470,1197,87,465,927,137,149,0.97,Chicago White Sox,Comiskey Park,985634,93,93,CHW,CHA,CHA +1967,AL,CLE,CLE,,8,162,81,75,87,,,N,N,559,5461,1282,213,35,131,413,984,53,65,,,613,533,3.2500000000,49,14,27,4431,1258,120,559,1189,115,138,0.98,Cleveland Indians,Cleveland Stadium,662980,102,102,CLE,CLE,CLE +1967,AL,DET,DET,,2,163,82,91,71,,,N,N,683,5410,1315,192,36,152,626,994,37,21,,,587,532,3.3200000000,46,17,40,4329,1230,151,472,1038,130,126,0.97,Detroit Tigers,Tiger Stadium,1447143,103,101,DET,DET,DET +1967,AL,KC1,OAK,,10,161,81,62,99,,,N,N,533,5349,1244,212,50,69,452,1019,132,59,,,660,584,3.6800000000,26,10,34,4284,1265,125,558,990,132,120,0.97,Kansas City Athletics,Municipal Stadium I,726639,97,99,KCA,KC1,KC1 +1967,AL,MIN,MIN,,2,164,81,91,71,,,N,N,671,5458,1309,216,48,131,512,976,55,37,,,590,510,3.1400000000,58,18,24,4383,1336,115,396,1089,132,123,0.97,Minnesota Twins,Metropolitan Stadium,1483547,108,107,MIN,MIN,MIN +1967,AL,NYA,NYY,,9,163,82,72,90,,,N,N,522,5443,1225,166,17,100,532,1043,63,37,,,621,533,3.2400000000,37,16,27,4440,1375,110,480,898,154,144,0.97,New York Yankees,Yankee Stadium I,1259514,95,96,NYY,NYA,NYA +1967,AL,WS2,TEX,,6,161,80,76,85,,,N,N,550,5441,1211,168,25,115,472,1037,53,37,,,637,553,3.3800000000,24,14,39,4419,1334,113,495,878,144,167,0.97,Washington Senators,R.F.K. Stadium,770868,96,97,WSA,WS2,WS2 +1967,NL,ATL,ATL,,7,162,81,77,85,,,N,N,631,5450,1307,191,29,158,512,947,55,45,,,640,561,3.4700000000,35,5,32,4362,1377,118,449,862,138,148,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1389222,99,99,ATL,ATL,ATL +1967,NL,CHN,CHC,,3,162,84,87,74,,,N,N,702,5463,1373,211,49,128,509,912,63,50,,,624,563,3.4800000000,47,7,28,4371,1352,142,463,888,121,143,0.98,Chicago Cubs,Wrigley Field,977226,105,105,CHC,CHN,CHN +1967,NL,CIN,CIN,,4,162,81,87,75,,,N,N,604,5519,1366,251,54,109,372,969,92,63,,,563,497,3.0500000000,34,18,39,4404,1328,101,498,1065,121,124,0.98,Cincinnati Reds,Crosley Field,958300,112,112,CIN,CIN,CIN +1967,NL,HOU,HOU,,9,162,81,69,93,,,N,N,626,5506,1372,259,46,93,537,934,88,38,,,742,647,4.0300000000,35,8,21,4335,1444,120,485,1060,157,120,0.97,Houston Astros,Astrodome,1348303,96,97,HOU,HOU,HOU +1967,NL,LAN,LAD,,8,162,81,73,89,,,N,N,519,5456,1285,203,38,82,485,881,56,47,,,595,525,3.2100000000,41,17,24,4419,1421,93,393,967,160,144,0.97,Los Angeles Dodgers,Dodger Stadium,1664362,91,91,LAD,LAN,LAN +1967,NL,NYN,NYM,,10,162,78,61,101,,,N,N,498,5417,1288,178,23,83,362,981,58,44,,,672,594,3.7300000000,36,10,19,4299,1369,124,536,893,157,147,0.97,New York Mets,Shea Stadium,1565492,98,100,NYM,NYN,NYN +1967,NL,PHI,PHI,,5,162,80,82,80,,,N,N,612,5401,1306,221,47,103,545,1033,79,62,,,581,500,3.1000000000,46,17,23,4359,1372,86,403,967,137,174,0.97,Philadelphia Phillies,Connie Mack Stadium,828888,101,101,PHI,PHI,PHI +1967,NL,PIT,PIT,,6,163,81,81,81,,,N,N,679,5724,1585,193,62,91,387,914,79,37,,,693,606,3.7400000000,35,5,35,4374,1439,108,561,820,141,186,0.97,Pittsburgh Pirates,Forbes Field,907012,100,99,PIT,PIT,PIT +1967,NL,SFN,SFG,,2,162,82,91,71,,,N,N,652,5524,1354,201,39,140,520,978,22,30,,,551,478,2.9200000000,64,17,25,4422,1283,113,453,990,134,149,0.97,San Francisco Giants,Candlestick Park,1242480,100,99,SFG,SFN,SFN +1967,NL,SLN,STL,,1,161,81,101,60,,,Y,Y,695,5566,1462,225,40,115,443,919,102,54,,,557,496,3.0500000000,44,17,45,4395,1313,97,431,956,140,127,0.97,St. Louis Cardinals,Busch Stadium II,2090145,99,97,STL,SLN,SLN +1968,AL,BAL,BAL,,2,162,80,91,71,,,N,N,579,5275,1187,215,28,133,570,1019,78,32,,,497,429,2.6600000000,53,16,31,4353,1111,101,502,1044,120,131,0.98,Baltimore Orioles,Memorial Stadium,943977,101,99,BAL,BAL,BAL +1968,AL,BOS,BOS,,4,162,81,86,76,,,N,N,614,5303,1253,207,17,125,582,974,76,62,,,611,535,3.3300000000,55,17,31,4341,1303,115,523,972,128,147,0.97,Boston Red Sox,Fenway Park II,1940788,108,107,BOS,BOS,BOS +1968,AL,CAL,ANA,,8,162,81,67,95,,,N,N,498,5331,1209,170,33,83,447,1080,62,50,,,615,548,3.4300000000,29,11,31,4311,1234,131,519,869,140,156,0.97,California Angels,Anaheim Stadium,1025956,95,97,CAL,CAL,CAL +1968,AL,CHA,CHW,,8,162,81,67,95,,,N,N,463,5405,1233,169,33,71,397,840,90,50,,,527,449,2.7500000000,20,11,40,4404,1290,97,451,834,151,152,0.97,Chicago White Sox,Comiskey Park,803775,106,107,CHW,CHA,CHA +1968,AL,CLE,CLE,,3,162,81,86,75,,,N,N,516,5416,1266,210,36,75,427,858,115,61,,,504,433,2.6600000000,48,23,32,4392,1087,98,540,1157,126,130,0.97,Cleveland Indians,Cleveland Stadium,857994,99,100,CLE,CLE,CLE +1968,AL,DET,DET,,1,164,81,103,59,,,Y,Y,671,5490,1292,190,39,185,521,964,26,32,,,492,448,2.7100000000,59,19,29,4467,1180,129,486,1115,101,133,0.98,Detroit Tigers,Tiger Stadium,2031847,103,101,DET,DET,DET +1968,AL,MIN,MIN,,7,162,81,79,83,,,N,N,562,5373,1274,207,41,105,445,966,98,54,,,546,460,2.8900000000,46,14,29,4299,1224,92,414,996,170,117,0.97,Minnesota Twins,Metropolitan Stadium,1143257,107,105,MIN,MIN,MIN +1968,AL,NYA,NYY,,5,164,82,83,79,,,N,N,536,5310,1137,154,34,109,566,958,90,50,,,531,455,2.7900000000,45,14,27,4401,1308,99,424,831,139,142,0.97,New York Yankees,Yankee Stadium I,1185666,96,96,NYY,NYA,NYA +1968,AL,OAK,OAK,,6,163,83,82,80,,,N,N,569,5406,1300,192,40,94,472,1022,147,61,,,544,475,2.9400000000,45,18,29,4365,1220,124,505,997,145,136,0.97,Oakland Athletics,Oakland Coliseum,837466,94,94,OAK,OAK,OAK +1968,AL,WS2,TEX,,10,161,81,65,96,,,N,N,524,5400,1208,160,37,124,454,960,29,19,,,665,582,3.6400000000,26,11,28,4317,1402,118,517,826,148,144,0.97,Washington Senators,R.F.K. Stadium,546661,97,98,WSA,WS2,WS2 +1968,NL,ATL,ATL,,5,163,81,81,81,,,N,N,514,5552,1399,179,31,80,414,782,83,44,,,549,478,2.9200000000,44,16,29,4422,1326,87,362,871,125,139,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,1126540,101,101,ATL,ATL,ATL +1968,NL,CHN,CHC,,3,163,82,84,78,,,N,N,612,5458,1319,203,43,130,415,854,41,30,,,611,551,3.4100000000,46,12,32,4359,1399,138,392,894,119,149,0.98,Chicago Cubs,Wrigley Field,1043409,107,106,CHC,CHN,CHN +1968,NL,CIN,CIN,,4,163,82,83,79,,,N,N,690,5767,1573,281,36,106,379,938,59,55,,,673,589,3.5600000000,24,16,38,4470,1399,114,573,963,144,144,0.97,Cincinnati Reds,Crosley Field,733354,106,106,CIN,CIN,CIN +1968,NL,HOU,HOU,,10,162,81,72,90,,,N,N,510,5336,1233,205,28,66,479,988,44,51,,,588,524,3.2600000000,50,12,23,4338,1362,68,479,1021,152,129,0.97,Houston Astros,Astrodome,1312887,97,99,HOU,HOU,HOU +1968,NL,LAN,LAD,,7,162,81,76,86,,,N,N,470,5354,1234,202,36,67,439,980,57,43,,,509,433,2.6900000000,38,23,31,4344,1293,65,414,994,144,144,0.97,Los Angeles Dodgers,Dodger Stadium,1581093,92,92,LAD,LAN,LAN +1968,NL,NYN,NYM,,9,163,82,73,89,,,N,N,473,5503,1252,178,30,81,379,1203,72,45,,,499,448,2.7200000000,45,25,32,4449,1250,87,430,1014,133,142,0.97,New York Mets,Shea Stadium,1781657,100,101,NYM,NYN,NYN +1968,NL,PHI,PHI,,7,162,81,76,86,,,N,N,543,5372,1253,178,30,100,462,1003,58,51,,,615,541,3.3600000000,42,12,27,4344,1416,91,421,935,127,163,0.98,Philadelphia Phillies,Connie Mack Stadium,664546,100,101,PHI,PHI,PHI +1968,NL,PIT,PIT,,6,163,81,80,82,,,N,N,583,5569,1404,180,44,80,422,953,130,59,,,532,453,2.7400000000,42,19,30,4461,1322,73,485,897,139,162,0.97,Pittsburgh Pirates,Forbes Field,693485,98,97,PIT,PIT,PIT +1968,NL,SFN,SFG,,2,163,81,88,74,,,N,N,599,5441,1301,162,33,108,508,904,50,37,,,529,442,2.7100000000,77,20,16,4407,1302,86,344,942,162,125,0.97,San Francisco Giants,Candlestick Park,837220,101,100,SFG,SFN,SFN +1968,NL,SLN,STL,,1,162,81,97,65,,,Y,N,583,5561,1383,227,48,73,378,897,110,45,,,472,409,2.4900000000,63,30,32,4437,1282,82,375,971,140,135,0.97,St. Louis Cardinals,Busch Stadium II,2011167,99,97,STL,SLN,SLN +1969,AL,BAL,BAL,E,1,162,81,109,53,Y,,Y,N,779,5518,1465,234,29,175,634,806,82,45,,,517,463,2.8300000000,50,20,36,4419,1194,117,498,897,101,145,0.98,Baltimore Orioles,Memorial Stadium,1062069,101,99,BAL,BAL,BAL +1969,AL,BOS,BOS,E,3,162,81,87,75,N,,N,N,743,5494,1381,234,37,197,658,923,41,47,,,736,639,3.9200000000,30,7,41,4398,1423,155,685,935,157,178,0.97,Boston Red Sox,Fenway Park II,1833246,107,106,BOS,BOS,BOS +1969,AL,CAL,ANA,W,3,163,81,71,91,N,,N,N,528,5316,1221,151,29,88,516,929,54,39,,,652,566,3.5400000000,25,9,39,4314,1294,126,517,885,135,164,0.97,California Angels,Anaheim Stadium,758388,94,95,CAL,CAL,CAL +1969,AL,CHA,CHW,W,5,162,81,68,94,N,,N,N,625,5450,1346,210,27,112,552,844,54,22,,,723,672,4.2100000000,29,10,25,4311,1470,146,564,810,122,163,0.98,Chicago White Sox,Comiskey Park,589546,106,107,CHW,CHA,CHA +1969,AL,CLE,CLE,E,6,161,81,62,99,N,,N,N,573,5365,1272,173,24,119,535,906,85,37,,,717,629,3.9400000000,35,7,22,4311,1330,134,681,1000,142,153,0.97,Cleveland Indians,Cleveland Stadium,619970,103,103,CLE,CLE,CLE +1969,AL,DET,DET,E,2,162,81,90,72,N,,N,N,701,5441,1316,188,29,182,578,922,35,28,,,601,535,3.3100000000,55,20,28,4365,1250,128,586,1032,126,130,0.97,Detroit Tigers,Tiger Stadium,1577481,105,104,DET,DET,DET +1969,AL,KCA,KCR,W,4,163,82,69,93,N,,N,N,586,5462,1311,179,32,98,522,901,129,70,,,688,605,3.7200000000,42,10,25,4392,1357,136,560,894,156,114,0.97,Kansas City Royals,Municipal Stadium II,902414,100,101,KCR,KCA,KCA +1969,AL,MIN,MIN,W,1,162,81,97,65,Y,,N,N,790,5677,1520,246,32,163,599,906,115,70,,,618,539,3.2400000000,41,8,43,4491,1388,119,524,906,150,177,0.97,Minnesota Twins,Metropolitan Stadium,1349328,104,102,MIN,MIN,MIN +1969,AL,NYA,NYY,E,5,162,80,80,81,N,,N,N,562,5308,1247,210,44,94,565,840,119,74,,,587,517,3.2300000000,53,13,20,4320,1258,118,522,801,131,158,0.97,New York Yankees,Yankee Stadium I,1067996,96,96,NYY,NYA,NYA +1969,AL,OAK,OAK,W,2,162,81,88,74,N,,N,N,740,5614,1400,210,28,148,617,953,100,39,,,678,610,3.7100000000,42,14,36,4440,1356,163,586,887,137,162,0.97,Oakland Athletics,Oakland Coliseum,778232,95,95,OAK,OAK,OAK +1969,AL,SE1,MIL,W,6,163,82,64,98,N,,N,N,639,5444,1276,179,27,125,626,1015,167,59,,,799,707,4.3500000000,21,6,33,4389,1490,172,653,963,167,149,0.97,Seattle Pilots,Sicks Stadium,677944,97,100,SEP,SE1,SE1 +1969,AL,WS2,TEX,E,4,162,81,86,76,N,,N,N,694,5447,1365,171,40,148,630,900,52,40,,,644,561,3.4900000000,28,10,41,4341,1310,135,656,835,140,159,0.97,Washington Senators,R.F.K. Stadium,918106,94,95,WSA,WS2,WS2 +1969,NL,ATL,ATL,W,1,162,81,93,69,Y,,N,N,691,5460,1411,195,22,141,485,665,59,48,,,631,567,3.5300000000,38,7,42,4335,1334,144,438,893,115,114,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,1458320,101,101,ATL,ATL,ATL +1969,NL,CHN,CHC,E,2,163,82,92,70,N,,N,N,720,5530,1400,215,40,142,559,928,30,32,,,611,540,3.3400000000,58,22,27,4362,1366,118,475,1017,136,149,0.97,Chicago Cubs,Wrigley Field,1674993,113,112,CHC,CHN,CHN +1969,NL,CIN,CIN,W,3,163,81,89,73,N,,N,N,798,5634,1558,224,42,171,474,1042,79,56,,,768,669,4.1100000000,23,11,44,4395,1478,149,611,818,168,158,0.97,Cincinnati Reds,Crosley Field,987991,105,105,CIN,CIN,CIN +1969,NL,HOU,HOU,W,5,162,81,81,81,N,,N,N,676,5348,1284,208,40,104,699,972,101,58,,,668,574,3.6000000000,52,11,34,4305,1347,111,547,1221,150,136,0.97,Houston Astros,Astrodome,1442995,98,98,HOU,HOU,HOU +1969,NL,LAN,LAD,W,4,162,81,85,77,N,,N,N,645,5532,1405,185,52,97,484,823,80,51,,,561,499,3.0800000000,47,20,31,4371,1324,122,420,975,109,130,0.98,Los Angeles Dodgers,Dodger Stadium,1784527,93,92,LAD,LAN,LAN +1969,NL,MON,WSN,E,6,162,81,52,110,N,,N,N,582,5419,1300,202,33,125,529,962,52,52,,,791,686,4.3300000000,26,8,21,4278,1429,145,702,973,184,179,0.97,Montreal Expos,Jarry Park,1212608,100,102,MON,MON,MON +1969,NL,NYN,NYM,E,1,162,82,100,62,Y,,Y,Y,632,5427,1311,184,41,109,527,1089,66,43,,,541,488,2.9900000000,51,28,35,4404,1217,119,517,1012,122,146,0.98,New York Mets,Shea Stadium,2175373,102,101,NYM,NYN,NYN +1969,NL,PHI,PHI,E,5,162,81,63,99,N,,N,N,645,5408,1304,227,35,137,549,1130,73,49,,,745,660,4.1400000000,47,14,21,4302,1494,134,570,921,136,157,0.97,Philadelphia Phillies,Connie Mack Stadium,519414,98,99,PHI,PHI,PHI +1969,NL,PIT,PIT,E,3,162,81,88,74,N,,N,N,725,5626,1557,220,52,119,454,944,74,34,,,652,580,3.6100000000,39,9,33,4335,1348,96,553,1124,155,169,0.97,Pittsburgh Pirates,Forbes Field,769369,98,97,PIT,PIT,PIT +1969,NL,SDN,SDP,W,6,162,81,52,110,N,,N,N,468,5357,1203,180,42,99,423,1143,45,44,,,746,670,4.2400000000,16,9,25,4266,1454,113,592,764,155,140,0.97,San Diego Padres,Jack Murphy Stadium,512970,96,98,SDP,SDN,SDN +1969,NL,SFN,SFG,W,2,162,81,90,72,N,,N,N,713,5474,1325,187,28,136,711,1054,71,32,,,636,534,3.2600000000,71,15,17,4419,1381,120,461,906,169,155,0.97,San Francisco Giants,Candlestick Park,873603,99,98,SFG,SFN,SFN +1969,NL,SLN,STL,E,4,162,80,87,75,N,,N,N,595,5536,1403,228,44,90,503,876,87,49,,,540,477,2.9400000000,63,12,26,4380,1289,99,511,1004,138,144,0.97,St. Louis Cardinals,Busch Stadium II,1682783,100,99,STL,SLN,SLN +1970,AL,BAL,BAL,E,1,162,81,108,54,Y,,Y,Y,792,5545,1424,213,25,179,717,952,84,39,,,574,517,3.1500000000,60,12,31,4434,1317,139,469,941,117,148,0.98,Baltimore Orioles,Memorial Stadium,1057069,101,98,BAL,BAL,BAL +1970,AL,BOS,BOS,E,3,162,81,87,75,N,,N,N,786,5535,1450,252,28,203,594,855,50,48,,,722,622,3.8700000000,38,8,44,4338,1391,156,594,1003,156,131,0.97,Boston Red Sox,Fenway Park II,1595278,108,107,BOS,BOS,BOS +1970,AL,CAL,ANA,W,3,162,81,86,76,N,,N,N,631,5532,1391,197,40,114,447,922,69,27,,,630,565,3.4800000000,21,10,49,4386,1280,154,559,922,127,169,0.98,California Angels,Anaheim Stadium,1077741,96,97,CAL,CAL,CAL +1970,AL,CHA,CHW,W,6,162,84,56,106,N,,N,N,633,5514,1394,192,20,123,477,872,53,33,,,822,721,4.5400000000,20,6,30,4290,1554,164,556,762,165,187,0.97,Chicago White Sox,Comiskey Park,495355,101,102,CHW,CHA,CHA +1970,AL,CLE,CLE,E,5,162,81,76,86,N,,N,N,649,5463,1358,197,23,183,503,909,25,36,,,675,630,3.9100000000,34,8,35,4353,1333,163,689,1076,133,168,0.97,Cleveland Indians,Cleveland Stadium,729752,104,105,CLE,CLE,CLE +1970,AL,DET,DET,E,4,162,81,79,83,N,,N,N,666,5377,1282,207,38,148,656,825,29,30,,,731,658,4.0900000000,33,9,39,4341,1443,153,623,1045,132,142,0.97,Detroit Tigers,Tiger Stadium,1501293,101,101,DET,DET,DET +1970,AL,KCA,KCR,W,4,162,79,65,97,N,,N,N,611,5503,1341,202,41,97,514,958,97,53,,,705,614,3.7800000000,30,11,25,4389,1346,138,641,915,152,162,0.97,Kansas City Royals,Municipal Stadium II,693047,99,100,KCR,KCA,KCA +1970,AL,MIN,MIN,W,1,162,81,98,64,Y,,N,N,744,5483,1438,230,41,153,501,905,57,52,,,605,520,3.2300000000,26,12,58,4344,1329,130,486,940,123,130,0.98,Minnesota Twins,Metropolitan Stadium,1261887,103,102,MIN,MIN,MIN +1970,AL,ML4,MIL,W,4,163,81,65,97,N,,N,N,613,5395,1305,202,24,126,592,985,91,73,,,751,676,4.2100000000,31,2,27,4338,1397,146,587,895,136,142,0.97,Milwaukee Brewers,County Stadium,933690,100,101,MIL,MIL,MIL +1970,AL,NYA,NYY,E,2,163,81,93,69,N,,N,N,680,5492,1381,208,41,111,588,808,105,61,,,612,530,3.2400000000,36,6,49,4413,1386,130,451,777,130,146,0.98,New York Yankees,Yankee Stadium I,1136879,95,95,NYY,NYA,NYA +1970,AL,OAK,OAK,W,2,162,81,89,73,N,,N,N,678,5376,1338,208,24,171,584,977,131,68,,,593,529,3.3000000000,33,15,40,4326,1253,134,542,858,141,152,0.97,Oakland Athletics,Oakland Coliseum,778355,97,95,OAK,OAK,OAK +1970,AL,WS2,TEX,E,6,162,81,70,92,N,,N,N,626,5460,1302,184,28,138,635,989,72,42,,,689,615,3.8000000000,20,11,40,4371,1375,139,611,823,116,173,0.98,Washington Senators,R.F.K. Stadium,824789,95,95,WSA,WS2,WS2 +1970,NL,ATL,ATL,W,5,162,81,76,86,N,,N,N,736,5546,1495,215,24,160,522,736,58,34,,,772,688,4.3300000000,45,9,24,4290,1451,185,478,960,140,118,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1078848,106,106,ATL,ATL,ATL +1970,NL,CHN,CHC,E,2,162,80,84,78,N,,N,N,806,5491,1424,228,44,179,607,844,39,16,,,679,600,3.7600000000,59,9,25,4305,1402,143,475,1000,137,146,0.97,Chicago Cubs,Wrigley Field,1642705,111,110,CHC,CHN,CHN +1970,NL,CIN,CIN,W,1,162,81,102,60,Y,,Y,N,775,5540,1498,253,45,191,547,984,115,52,,,681,592,3.6900000000,32,15,60,4332,1370,118,592,843,151,173,0.97,Cincinnati Reds,Crosley Field/Riverfront Stadium,1803568,104,103,CIN,CIN,CIN +1970,NL,HOU,HOU,W,4,162,81,79,83,N,,N,N,744,5574,1446,250,47,129,598,911,114,41,,,763,684,4.2300000000,36,6,35,4368,1491,131,577,942,138,144,0.97,Houston Astros,Astrodome,1253444,96,96,HOU,HOU,HOU +1970,NL,LAN,LAD,W,2,161,81,87,74,N,,N,N,749,5606,1515,233,67,87,541,841,138,57,,,684,619,3.8200000000,37,17,42,4374,1394,164,496,880,133,135,0.97,Los Angeles Dodgers,Dodger Stadium,1697142,95,94,LAD,LAN,LAN +1970,NL,MON,WSN,E,6,162,80,73,89,N,,N,N,687,5411,1284,211,35,136,659,972,65,45,,,807,719,4.5000000000,29,10,32,4314,1434,162,716,914,141,193,0.97,Montreal Expos,Jarry Park,1424683,99,101,MON,MON,MON +1970,NL,NYN,NYM,E,3,162,82,83,79,N,,N,N,695,5443,1358,211,42,120,684,1062,118,54,,,630,559,3.4500000000,47,10,32,4377,1260,135,575,1064,124,136,0.97,New York Mets,Shea Stadium,2697479,100,99,NYM,NYN,NYN +1970,NL,PHI,PHI,E,5,161,80,73,88,N,,N,N,594,5456,1299,224,58,101,519,1066,72,64,,,730,677,4.1700000000,24,8,36,4383,1483,132,538,1047,112,134,0.98,Philadelphia Phillies,Connie Mack Stadium,708247,98,99,PHI,PHI,PHI +1970,NL,PIT,PIT,E,1,162,82,89,73,Y,,N,N,729,5637,1522,235,70,130,444,871,66,34,,,664,597,3.7000000000,36,13,43,4359,1386,106,625,990,137,195,0.97,Pittsburgh Pirates,Forbes Field/Three Rivers Stadium,1341947,97,96,PIT,PIT,PIT +1970,NL,SDN,SDP,W,6,162,81,63,99,N,,N,N,681,5494,1353,208,36,172,500,1164,60,45,,,788,698,4.3600000000,24,9,32,4320,1483,149,611,886,157,159,0.97,San Diego Padres,Jack Murphy Stadium,643679,96,98,SDP,SDN,SDN +1970,NL,SFN,SFG,W,3,162,81,86,76,N,,N,N,831,5578,1460,257,35,165,729,1005,83,27,,,826,728,4.5000000000,50,7,30,4371,1514,156,604,931,170,153,0.97,San Francisco Giants,Candlestick Park,740720,100,99,SFG,SFN,SFN +1970,NL,SLN,STL,E,4,162,81,76,86,N,,N,N,744,5689,1497,218,51,113,569,961,117,47,,,747,665,4.0600000000,51,11,20,4425,1483,102,632,960,150,159,0.97,St. Louis Cardinals,Busch Stadium II,1629736,103,102,STL,SLN,SLN +1971,AL,BAL,BAL,E,1,158,77,101,57,Y,,Y,N,742,5303,1382,207,25,158,672,844,66,38,,,530,470,2.9900000000,71,15,22,4245,1257,125,416,793,112,148,0.98,Baltimore Orioles,Memorial Stadium,1023037,99,97,BAL,BAL,BAL +1971,AL,BOS,BOS,E,3,162,80,85,77,N,,N,N,691,5401,1360,246,28,161,552,871,51,34,,,667,609,3.8000000000,44,11,35,4329,1424,136,535,871,116,149,0.98,Boston Red Sox,Fenway Park II,1678732,108,108,BOS,BOS,BOS +1971,AL,CAL,ANA,W,4,162,81,76,86,N,,N,N,511,5495,1271,213,18,96,441,827,72,34,,,576,510,3.1000000000,39,11,32,4443,1246,101,607,904,131,159,0.98,California Angels,Anaheim Stadium,926373,93,93,CAL,CAL,CAL +1971,AL,CHA,CHW,W,3,162,81,79,83,N,,N,N,617,5382,1346,185,30,138,562,870,83,65,,,597,503,3.1200000000,46,19,32,4350,1348,100,468,976,160,128,0.97,Chicago White Sox,Comiskey Park,833891,104,104,CHW,CHA,CHA +1971,AL,CLE,CLE,E,6,162,81,60,102,N,,N,N,543,5467,1303,200,20,109,467,868,57,37,,,747,685,4.2800000000,21,7,32,4320,1352,154,770,937,116,159,0.98,Cleveland Indians,Cleveland Stadium,591361,109,110,CLE,CLE,CLE +1971,AL,DET,DET,E,2,162,81,91,71,N,,N,N,701,5502,1399,214,38,179,540,854,35,43,,,645,592,3.6300000000,53,11,32,4404,1355,126,609,1000,106,156,0.98,Detroit Tigers,Tiger Stadium,1591073,105,105,DET,DET,DET +1971,AL,KCA,KCR,W,2,161,81,85,76,N,,N,N,603,5295,1323,225,40,80,490,819,130,46,,,566,513,3.2500000000,34,15,44,4260,1301,84,496,775,132,178,0.97,Kansas City Royals,Municipal Stadium II,910784,99,99,KCR,KCA,KCA +1971,AL,MIN,MIN,W,5,160,79,74,86,N,,N,N,654,5414,1406,197,31,116,512,846,66,44,,,670,599,3.8100000000,43,9,25,4248,1384,139,529,895,117,134,0.98,Minnesota Twins,Metropolitan Stadium,940858,103,102,MIN,MIN,MIN +1971,AL,ML4,MIL,W,6,161,82,69,92,N,,N,N,534,5185,1188,160,23,104,543,924,82,53,,,609,532,3.3800000000,32,23,32,4248,1303,130,569,795,138,152,0.97,Milwaukee Brewers,County Stadium,731531,98,100,MIL,MIL,MIL +1971,AL,NYA,NYY,E,4,162,81,82,80,N,,N,N,648,5413,1377,195,43,97,581,717,75,55,,,641,553,3.4300000000,67,15,12,4356,1382,126,423,707,125,159,0.98,New York Yankees,Yankee Stadium I,1070771,94,94,NYY,NYA,NYA +1971,AL,OAK,OAK,W,1,161,81,101,60,Y,,N,N,691,5494,1383,195,25,160,542,1018,80,53,,,564,498,3.0500000000,57,18,36,4407,1229,131,501,999,117,157,0.98,Oakland Athletics,Oakland Coliseum,914993,98,97,OAK,OAK,OAK +1971,AL,WS2,TEX,E,5,159,81,63,96,N,,N,N,537,5290,1219,189,30,86,575,956,68,45,,,660,583,3.7000000000,30,10,26,4254,1376,132,554,762,141,170,0.97,Washington Senators,R.F.K. Stadium,655156,94,95,WSA,WS2,WS2 +1971,NL,ATL,ATL,W,3,162,82,82,80,N,,N,N,643,5575,1434,192,30,153,434,747,57,46,,,699,614,3.7500000000,40,11,31,4422,1529,152,485,823,146,180,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1006320,106,107,ATL,ATL,ATL +1971,NL,CHN,CHC,E,3,162,81,83,79,N,,N,N,637,5438,1401,202,34,128,527,772,44,32,,,648,579,3.6100000000,75,17,13,4332,1458,132,411,900,126,150,0.98,Chicago Cubs,Wrigley Field,1653007,113,113,CHC,CHN,CHN +1971,NL,CIN,CIN,W,4,162,81,79,83,N,,N,N,586,5414,1306,203,28,138,438,907,59,33,,,581,537,3.3500000000,27,11,38,4332,1298,112,501,750,103,174,0.98,Cincinnati Reds,Riverfront Stadium,1501122,95,94,CIN,CIN,CIN +1971,NL,HOU,HOU,W,4,162,81,79,83,N,,N,N,585,5492,1319,230,52,71,478,888,101,51,,,567,512,3.1300000000,43,10,25,4413,1318,75,475,914,104,152,0.98,Houston Astros,Astrodome,1261589,98,97,HOU,HOU,HOU +1971,NL,LAN,LAD,W,2,162,81,89,73,N,,N,N,663,5523,1469,213,38,95,489,755,76,40,,,587,520,3.2300000000,48,18,33,4347,1363,110,399,853,131,159,0.97,Los Angeles Dodgers,Dodger Stadium,2064594,94,93,LAD,LAN,LAN +1971,NL,MON,WSN,E,5,162,80,71,90,N,,N,N,622,5335,1312,197,29,88,543,800,51,43,,,729,656,4.1200000000,49,8,25,4302,1418,133,658,829,150,164,0.97,Montreal Expos,Jarry Park,1290963,100,101,MON,MON,MON +1971,NL,NYN,NYM,E,3,162,81,83,79,N,,N,N,588,5477,1365,203,29,98,547,958,89,43,,,550,487,2.9900000000,42,13,22,4398,1227,100,529,1157,112,135,0.98,New York Mets,Shea Stadium,2266680,98,98,NYM,NYN,NYN +1971,NL,PHI,PHI,E,6,162,81,67,95,N,,N,N,558,5538,1289,209,35,123,499,1031,63,39,,,688,606,3.7100000000,31,10,25,4410,1396,132,525,838,121,158,0.98,Philadelphia Phillies,Veterans Stadium,1511223,100,102,PHI,PHI,PHI +1971,NL,PIT,PIT,E,1,162,80,97,65,Y,,Y,Y,788,5674,1555,223,61,154,469,919,65,31,,,599,537,3.3100000000,43,15,48,4383,1426,108,470,813,133,164,0.97,Pittsburgh Pirates,Three Rivers Stadium,1501132,102,100,PIT,PIT,PIT +1971,NL,SDN,SDP,W,6,161,81,61,100,N,,N,N,486,5366,1250,184,31,96,438,966,70,45,,,610,514,3.2200000000,47,10,17,4314,1351,93,559,923,161,144,0.97,San Diego Padres,Jack Murphy Stadium,557513,93,95,SDP,SDN,SDN +1971,NL,SFN,SFG,W,1,162,81,90,72,Y,,N,N,706,5461,1348,224,36,140,654,1042,101,36,,,644,536,3.3200000000,45,14,30,4362,1324,128,471,831,177,153,0.97,San Francisco Giants,Candlestick Park,1106043,99,99,SFG,SFN,SFN +1971,NL,SLN,STL,E,2,163,82,90,72,N,,N,N,739,5610,1542,225,54,95,543,757,124,53,,,699,628,3.8500000000,56,14,22,4401,1482,104,576,911,142,155,0.97,St. Louis Cardinals,Busch Stadium II,1604671,104,104,STL,SLN,SLN +1972,AL,BAL,BAL,E,3,154,77,80,74,N,,N,N,519,5028,1153,193,29,100,507,935,78,41,,,430,385,2.5300000000,62,20,21,4113,1116,85,395,788,100,150,0.98,Baltimore Orioles,Memorial Stadium,899950,103,101,BAL,BAL,BAL +1972,AL,BOS,BOS,E,2,155,78,85,70,N,,N,N,640,5208,1289,229,34,124,522,858,66,30,,,620,533,3.4700000000,48,20,25,4146,1309,101,512,918,130,141,0.97,Boston Red Sox,Fenway Park II,1441718,106,106,BOS,BOS,BOS +1972,AL,CAL,ANA,W,5,155,80,75,80,N,,N,N,454,5165,1249,171,26,78,358,850,57,37,,,533,468,3.0600000000,57,18,16,4131,1109,90,620,1000,114,135,0.98,California Angels,Anaheim Stadium,744190,94,95,CAL,CAL,CAL +1972,AL,CHA,CHW,W,2,154,78,87,67,N,,N,N,566,5083,1208,170,28,108,511,991,100,52,,,538,480,3.1200000000,36,14,42,4155,1269,94,431,936,135,136,0.97,Chicago White Sox,Comiskey Park,1177318,103,103,CHW,CHA,CHA +1972,AL,CLE,CLE,E,5,156,77,72,84,N,,N,N,472,5207,1220,187,18,91,420,762,49,53,,,519,457,2.9200000000,47,13,24,4230,1232,123,534,846,111,157,0.98,Cleveland Indians,Cleveland Stadium,626354,104,106,CLE,CLE,CLE +1972,AL,DET,DET,E,1,156,78,86,70,Y,,N,N,558,5099,1206,179,32,122,483,793,17,21,,,514,456,2.9600000000,46,11,33,4164,1212,101,465,952,96,137,0.98,Detroit Tigers,Tiger Stadium,1892386,103,103,DET,DET,DET +1972,AL,KCA,KCR,W,4,154,77,76,78,N,,N,N,580,5167,1317,220,26,78,534,711,85,44,,,545,497,3.2400000000,44,16,29,4143,1293,85,405,801,116,164,0.98,Kansas City Royals,Municipal Stadium II,707656,99,98,KCR,KCA,KCA +1972,AL,MIN,MIN,W,3,154,74,77,77,N,,N,N,537,5234,1277,182,31,93,478,905,53,41,,,535,441,2.8400000000,37,17,34,4197,1188,105,444,838,159,133,0.97,Minnesota Twins,Metropolitan Stadium,797901,105,105,MIN,MIN,MIN +1972,AL,ML4,MIL,E,6,156,79,65,91,N,,N,N,493,5124,1204,167,22,88,472,868,64,57,,,595,533,3.4500000000,37,14,32,4173,1289,116,486,740,139,145,0.97,Milwaukee Brewers,County Stadium,600440,97,98,MIL,MIL,MIL +1972,AL,NYA,NYY,E,4,155,77,79,76,N,,N,N,557,5168,1288,201,24,103,491,689,71,42,,,527,465,3.0500000000,35,19,39,4119,1306,87,419,625,134,179,0.97,New York Yankees,Yankee Stadium I,966328,97,96,NYY,NYA,NYA +1972,AL,OAK,OAK,W,1,155,77,93,62,Y,,Y,Y,604,5200,1248,195,29,134,463,886,87,48,,,457,406,2.5800000000,42,23,43,4251,1170,96,418,862,130,146,0.97,Oakland Athletics,Oakland Coliseum,921323,95,93,OAK,OAK,OAK +1972,AL,TEX,TEX,W,6,154,77,54,100,N,,N,N,461,5029,1092,166,17,56,503,926,126,73,,,628,539,3.5300000000,11,8,34,4122,1258,92,613,868,166,147,0.97,Texas Rangers,Arlington Stadium,662974,96,98,TEX,TEX,TEX +1972,NL,ATL,ATL,W,4,155,78,70,84,N,,N,N,628,5278,1363,186,17,144,532,770,47,35,,,730,653,4.2700000000,40,4,27,4131,1412,155,512,732,156,130,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,752973,109,110,ATL,ATL,ATL +1972,NL,CHN,CHC,E,2,156,77,85,70,N,,N,N,685,5247,1346,206,40,133,565,815,69,47,,,567,500,3.2200000000,54,19,32,4194,1329,112,421,824,132,148,0.97,Chicago Cubs,Wrigley Field,1299163,110,110,CHC,CHN,CHN +1972,NL,CIN,CIN,W,1,154,76,95,59,Y,,Y,N,707,5241,1317,214,44,124,606,914,140,63,,,557,504,3.2100000000,25,15,60,4236,1313,129,435,806,110,143,0.98,Cincinnati Reds,Riverfront Stadium,1611459,94,93,CIN,CIN,CIN +1972,NL,HOU,HOU,W,3,153,77,84,69,N,,N,N,708,5267,1359,233,38,134,524,907,111,56,,,636,580,3.7700000000,38,14,31,4155,1340,114,498,971,114,151,0.98,Houston Astros,Astrodome,1469247,98,97,HOU,HOU,HOU +1972,NL,LAN,LAD,W,2,155,75,85,70,N,,N,N,584,5270,1349,178,39,98,480,786,82,39,,,527,433,2.7800000000,50,23,29,4209,1196,83,429,856,162,145,0.97,Los Angeles Dodgers,Dodger Stadium,1860858,98,97,LAD,LAN,LAN +1972,NL,MON,WSN,E,5,156,78,70,86,N,,N,N,513,5156,1205,156,22,91,474,828,68,66,,,609,559,3.5900000000,39,11,23,4203,1281,103,579,888,134,141,0.97,Montreal Expos,Jarry Park,1142145,101,102,MON,MON,MON +1972,NL,NYN,NYM,E,3,156,78,83,73,N,,N,N,528,5135,1154,175,31,105,589,990,41,41,,,578,512,3.2600000000,32,12,41,4242,1263,118,486,1059,116,122,0.98,New York Mets,Shea Stadium,2134185,97,97,NYM,NYN,NYN +1972,NL,PHI,PHI,E,6,156,79,59,97,N,,N,N,503,5248,1240,200,36,98,487,930,42,50,,,635,569,3.6600000000,43,13,15,4200,1318,117,536,927,116,142,0.98,Philadelphia Phillies,Veterans Stadium,1343329,102,104,PHI,PHI,PHI +1972,NL,PIT,PIT,E,1,155,78,96,59,Y,,N,N,691,5490,1505,251,47,110,404,871,49,30,,,512,441,2.8100000000,39,15,48,4242,1282,90,433,838,136,171,0.97,Pittsburgh Pirates,Three Rivers Stadium,1427460,99,97,PIT,PIT,PIT +1972,NL,SDN,SDP,W,6,153,80,58,95,N,,N,N,488,5213,1181,168,38,102,407,976,78,46,,,665,589,3.7800000000,39,17,19,4209,1350,121,618,960,144,146,0.97,San Diego Padres,Jack Murphy Stadium,644273,92,95,SDP,SDN,SDN +1972,NL,SFN,SFG,W,5,155,77,69,86,N,,N,N,662,5245,1281,211,36,150,480,964,123,45,,,649,568,3.6900000000,44,8,23,4158,1309,130,507,771,154,121,0.97,San Francisco Giants,Candlestick Park,647744,102,102,SFG,SFN,SFN +1972,NL,SLN,STL,E,4,156,77,75,81,N,,N,N,568,5326,1383,214,42,70,437,793,104,48,,,600,532,3.4200000000,64,13,13,4197,1290,87,531,912,140,146,0.97,St. Louis Cardinals,Busch Stadium II,1196894,99,99,STL,SLN,SLN +1973,AL,BAL,BAL,E,1,162,81,97,65,Y,,N,N,754,5537,1474,229,48,119,648,752,146,64,,,561,498,3.0700000000,67,14,26,4383,1297,124,475,715,119,184,0.98,Baltimore Orioles,Memorial Stadium,958667,99,98,BAL,BAL,BAL +1973,AL,BOS,BOS,E,2,162,81,89,73,N,,N,N,738,5513,1472,235,30,147,581,799,114,45,,,647,584,3.6500000000,67,10,33,4320,1417,158,499,808,127,162,0.97,Boston Red Sox,Fenway Park II,1481002,106,106,BOS,BOS,BOS +1973,AL,CAL,ANA,W,4,162,81,79,83,N,,N,N,629,5505,1395,183,29,93,509,816,59,47,,,657,571,3.5300000000,72,13,19,4368,1351,104,614,1010,156,153,0.97,California Angels,Anaheim Stadium,1058206,92,92,CAL,CAL,CAL +1973,AL,CHA,CHW,W,5,162,81,77,85,N,,N,N,652,5475,1400,228,38,111,537,952,83,73,,,705,624,3.8600000000,48,15,35,4368,1484,110,574,848,144,165,0.97,Chicago White Sox,Comiskey Park,1302527,105,105,CHW,CHA,CHA +1973,AL,CLE,CLE,E,6,162,81,71,91,N,,N,N,680,5592,1429,205,29,158,471,793,60,68,,,826,745,4.5800000000,55,9,21,4392,1532,172,602,883,138,174,0.97,Cleveland Indians,Cleveland Stadium,615107,103,104,CLE,CLE,CLE +1973,AL,DET,DET,E,3,162,81,85,77,N,,N,N,642,5508,1400,213,32,157,509,722,28,30,,,674,627,3.9000000000,39,11,46,4341,1468,154,493,911,112,144,0.98,Detroit Tigers,Tiger Stadium,1724146,106,107,DET,DET,DET +1973,AL,KCA,KCR,W,2,162,81,88,74,N,,N,N,755,5508,1440,239,40,114,644,696,105,69,,,752,675,4.1900000000,40,7,41,4347,1521,114,617,790,167,192,0.97,Kansas City Royals,Royals Stadium,1345341,106,106,KCR,KCA,KCA +1973,AL,MIN,MIN,W,3,162,81,81,81,N,,N,N,738,5625,1521,240,44,120,598,954,87,46,,,692,608,3.7700000000,48,18,34,4353,1443,115,519,879,139,147,0.97,Minnesota Twins,Metropolitan Stadium,907499,104,104,MIN,MIN,MIN +1973,AL,ML4,MIL,E,5,162,81,74,88,N,,N,N,708,5526,1399,229,40,145,563,977,110,66,,,731,643,3.9800000000,50,11,28,4362,1476,119,623,671,145,167,0.97,Milwaukee Brewers,County Stadium,1092158,97,98,MIL,MIL,MIL +1973,AL,NYA,NYY,E,4,162,81,80,82,N,,N,N,641,5492,1435,212,17,131,489,680,47,43,,,610,530,3.3400000000,47,16,39,4281,1379,109,457,708,156,172,0.97,New York Yankees,Yankee Stadium I,1262103,97,96,NYY,NYA,NYA +1973,AL,OAK,OAK,W,1,162,81,94,68,Y,,Y,Y,758,5507,1431,216,28,147,595,919,128,57,,,615,533,3.2900000000,46,16,41,4371,1311,143,494,797,137,170,0.97,Oakland Athletics,Oakland Coliseum,1000763,95,93,OAK,OAK,OAK +1973,AL,TEX,TEX,W,6,162,81,57,105,N,,N,N,619,5488,1397,195,29,110,503,791,91,53,,,844,737,4.6400000000,35,10,27,4290,1514,130,680,831,161,164,0.97,Texas Rangers,Arlington Stadium,686085,95,97,TEX,TEX,TEX +1973,NL,ATL,ATL,W,5,162,81,76,85,N,,N,N,799,5631,1497,219,34,206,608,870,84,40,,,774,690,4.2500000000,34,9,35,4386,1467,144,575,803,166,142,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,800655,108,108,ATL,ATL,ATL +1973,NL,CHN,CHC,E,5,161,80,77,84,N,,N,N,614,5363,1322,201,21,117,575,855,65,58,,,655,584,3.6600000000,27,13,40,4311,1471,128,438,885,157,155,0.97,Chicago Cubs,Wrigley Field,1351705,107,107,CHC,CHN,CHN +1973,NL,CIN,CIN,W,1,162,81,99,63,Y,,N,N,741,5505,1398,232,34,137,639,947,148,55,,,621,556,3.4000000000,39,17,43,4419,1389,135,518,801,115,162,0.98,Cincinnati Reds,Riverfront Stadium,2017601,95,93,CIN,CIN,CIN +1973,NL,HOU,HOU,W,4,162,81,82,80,N,,N,N,681,5532,1391,216,35,134,469,962,92,48,,,672,608,3.7500000000,45,14,26,4380,1389,111,575,907,112,140,0.98,Houston Astros,Astrodome,1394004,99,99,HOU,HOU,HOU +1973,NL,LAN,LAD,W,2,162,81,95,66,N,,N,N,675,5604,1473,219,29,110,497,795,109,50,,,565,497,3.0000000000,45,15,38,4473,1270,129,461,961,125,166,0.98,Los Angeles Dodgers,Dodger Stadium,2136192,97,95,LAD,LAN,LAN +1973,NL,MON,WSN,E,4,162,81,79,83,N,,N,N,668,5369,1345,190,23,125,695,777,77,68,,,702,598,3.7100000000,26,6,38,4353,1356,128,681,866,163,156,0.97,Montreal Expos,Jarry Park,1246863,103,104,MON,MON,MON +1973,NL,NYN,NYM,E,1,161,81,82,79,Y,,Y,N,608,5457,1345,198,24,85,540,805,27,22,,,588,531,3.2600000000,47,15,40,4395,1345,127,490,1027,126,140,0.98,New York Mets,Shea Stadium,1912390,98,99,NYM,NYN,NYN +1973,NL,PHI,PHI,E,6,162,81,71,91,N,,N,N,642,5546,1381,218,29,134,476,979,51,47,,,717,642,3.9900000000,49,11,22,4341,1435,131,632,919,134,179,0.97,Philadelphia Phillies,Veterans Stadium,1475934,102,103,PHI,PHI,PHI +1973,NL,PIT,PIT,E,3,162,81,80,82,N,,N,N,704,5608,1465,257,44,154,432,842,23,30,,,693,601,3.7300000000,26,11,44,4350,1426,110,564,839,151,156,0.97,Pittsburgh Pirates,Three Rivers Stadium,1319913,98,96,PIT,PIT,PIT +1973,NL,SDN,SDP,W,6,162,81,60,102,N,,N,N,548,5457,1330,198,26,112,401,966,88,36,,,770,661,4.1600000000,34,10,23,4290,1461,157,548,845,170,152,0.97,San Diego Padres,Jack Murphy Stadium,611826,91,94,SDP,SDN,SDN +1973,NL,SFN,SFG,W,3,162,81,88,74,N,,N,N,739,5537,1452,212,52,161,590,913,112,52,,,702,611,3.7900000000,33,8,44,4356,1442,145,485,787,163,138,0.97,San Francisco Giants,Candlestick Park,834193,105,105,SFG,SFN,SFN +1973,NL,SLN,STL,E,2,162,81,81,81,N,,N,N,643,5478,1418,240,35,75,531,796,100,46,,,603,527,3.2500000000,42,14,36,4380,1366,105,486,867,158,149,0.97,St. Louis Cardinals,Busch Stadium II,1574046,100,100,STL,SLN,SLN +1974,AL,BAL,BAL,E,1,162,81,91,71,Y,,N,N,659,5535,1418,226,27,116,509,770,145,58,,,612,536,3.2700000000,57,16,25,4422,1393,101,480,701,128,174,0.98,Baltimore Orioles,Memorial Stadium,962572,97,95,BAL,BAL,BAL +1974,AL,BOS,BOS,E,3,162,81,84,78,N,,N,N,696,5499,1449,236,31,109,569,811,104,58,,,661,601,3.7200000000,71,12,18,4365,1462,126,463,751,145,156,0.97,Boston Red Sox,Fenway Park II,1556411,108,107,BOS,BOS,BOS +1974,AL,CAL,ANA,W,6,163,81,68,94,N,,N,N,618,5401,1372,203,31,95,509,801,119,79,,,657,563,3.5200000000,64,13,12,4317,1339,101,649,986,147,150,0.97,California Angels,Anaheim Stadium,917269,94,94,CAL,CAL,CAL +1974,AL,CHA,CHW,W,4,163,82,80,80,N,,N,N,684,5577,1492,225,23,135,519,858,64,53,,,721,641,3.9400000000,55,11,29,4395,1470,103,548,826,147,188,0.97,Chicago White Sox,Comiskey Park,1149596,103,104,CHW,CHA,CHA +1974,AL,CLE,CLE,E,4,162,81,77,85,N,,N,N,662,5474,1395,201,19,131,432,756,79,68,,,694,610,3.8000000000,45,9,27,4335,1419,138,479,650,143,157,0.97,Cleveland Indians,Cleveland Stadium,1114262,99,100,CLE,CLE,CLE +1974,AL,DET,DET,E,6,162,81,72,90,N,,N,N,620,5568,1375,200,35,131,436,784,67,38,,,768,673,4.1600000000,54,7,15,4365,1443,148,621,869,158,155,0.97,Detroit Tigers,Tiger Stadium,1243080,102,104,DET,DET,DET +1974,AL,KCA,KCR,W,5,162,81,77,85,N,,N,N,667,5582,1448,232,42,89,550,768,146,76,,,662,574,3.5100000000,54,13,17,4413,1477,91,482,731,152,166,0.97,Kansas City Royals,Royals Stadium,1173292,105,105,KCR,KCA,KCA +1974,AL,MIN,MIN,W,3,163,82,82,80,N,,N,N,673,5632,1530,190,37,111,520,791,74,45,,,669,588,3.6400000000,43,11,29,4365,1436,115,513,934,151,164,0.97,Minnesota Twins,Metropolitan Stadium,662401,104,104,MIN,MIN,MIN +1974,AL,ML4,MIL,E,5,162,81,76,86,N,,N,N,647,5472,1335,228,49,120,500,909,106,75,,,660,609,3.7600000000,43,11,24,4371,1476,126,493,621,127,168,0.98,Milwaukee Brewers,County Stadium,955741,99,99,MIL,MIL,MIL +1974,AL,NYA,NYY,E,2,162,81,89,73,N,,N,N,671,5524,1451,220,30,101,515,690,53,35,,,623,535,3.3100000000,53,13,24,4365,1402,104,528,829,142,158,0.97,New York Yankees,Shea Stadium,1273075,99,98,NYY,NYA,NYA +1974,AL,OAK,OAK,W,1,162,81,90,72,Y,,Y,Y,689,5331,1315,205,37,132,568,876,164,93,,,551,472,2.9500000000,49,12,28,4317,1322,90,430,755,141,154,0.97,Oakland Athletics,Oakland Coliseum,845693,94,92,OAK,OAK,OAK +1974,AL,TEX,TEX,W,2,161,80,84,76,N,,N,N,690,5449,1482,198,39,99,508,710,113,80,,,698,608,3.8200000000,62,16,12,4299,1423,126,449,871,163,164,0.97,Texas Rangers,Arlington Stadium,1193902,97,98,TEX,TEX,TEX +1974,NL,ATL,ATL,W,3,163,81,88,74,N,,N,N,661,5533,1375,202,37,120,571,772,72,44,,,563,500,3.0500000000,46,21,22,4422,1343,97,488,772,132,161,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,981085,104,104,ATL,ATL,ATL +1974,NL,CHN,CHC,E,6,162,81,66,96,N,,N,N,669,5574,1397,221,42,110,621,857,78,73,,,826,697,4.2800000000,23,6,26,4398,1593,122,576,895,199,141,0.96,Chicago Cubs,Wrigley Field,1015378,103,105,CHC,CHN,CHN +1974,NL,CIN,CIN,W,2,163,82,98,64,N,,N,N,776,5535,1437,271,35,135,693,940,146,49,,,631,555,3.4100000000,34,11,27,4398,1364,126,536,875,134,151,0.97,Cincinnati Reds,Riverfront Stadium,2164307,99,97,CIN,CIN,CIN +1974,NL,HOU,HOU,W,4,162,81,81,81,N,,N,N,653,5489,1441,222,41,110,471,864,108,65,,,632,557,3.4600000000,36,18,18,4350,1396,84,601,738,108,161,0.98,Houston Astros,Astrodome,1090728,96,96,HOU,HOU,HOU +1974,NL,LAN,LAD,W,1,162,81,102,60,Y,,Y,N,798,5557,1511,231,34,139,597,820,149,75,,,561,483,2.9700000000,33,19,23,4395,1272,112,464,943,157,122,0.97,Los Angeles Dodgers,Dodger Stadium,2632474,96,94,LAD,LAN,LAN +1974,NL,MON,WSN,E,4,161,80,79,82,N,,N,N,662,5343,1355,201,29,86,652,812,124,49,,,657,572,3.6000000000,35,8,27,4287,1340,99,544,822,153,157,0.97,Montreal Expos,Jarry Park,1019134,105,106,MON,MON,MON +1974,NL,NYN,NYM,E,5,162,81,71,91,N,,N,N,572,5468,1286,183,22,96,597,735,43,23,,,646,559,3.4200000000,46,15,14,4410,1433,99,504,908,158,150,0.97,New York Mets,Shea Stadium,1722209,99,99,NYM,NYN,NYN +1974,NL,PHI,PHI,E,3,162,81,80,82,N,,N,N,676,5494,1434,233,50,95,469,822,115,58,,,701,629,3.9100000000,46,4,19,4341,1394,111,682,892,148,168,0.97,Philadelphia Phillies,Veterans Stadium,1808648,104,104,PHI,PHI,PHI +1974,NL,PIT,PIT,E,1,162,81,88,74,Y,,N,N,751,5702,1560,238,46,114,514,828,55,31,,,657,568,3.4900000000,51,9,17,4398,1428,93,543,721,162,154,0.97,Pittsburgh Pirates,Three Rivers Stadium,1110552,97,95,PIT,PIT,PIT +1974,NL,SDN,SDP,W,6,162,81,60,102,N,,N,N,541,5415,1239,196,27,99,564,900,85,45,,,830,735,4.5800000000,25,7,19,4335,1536,124,715,855,170,126,0.97,San Diego Padres,Jack Murphy Stadium,1075399,95,98,SDP,SDN,SDN +1974,NL,SFN,SFG,W,5,162,81,72,90,N,,N,N,634,5482,1380,228,38,93,548,869,107,51,,,723,604,3.7800000000,27,11,25,4317,1409,116,559,756,175,153,0.97,San Francisco Giants,Candlestick Park,519987,105,105,SFG,SFN,SFN +1974,NL,SLN,STL,E,2,161,81,86,75,N,,N,N,677,5620,1492,216,46,83,531,752,172,62,,,643,570,3.4800000000,37,13,20,4419,1399,97,616,794,147,192,0.97,St. Louis Cardinals,Busch Stadium II,1838413,100,100,STL,SLN,SLN +1975,AL,BAL,BAL,E,2,159,77,90,69,N,,N,N,682,5474,1382,224,33,124,580,834,104,55,,,553,511,3.1700000000,70,19,21,4353,1285,110,500,717,107,175,0.98,Baltimore Orioles,Memorial Stadium,1002157,94,93,BAL,BAL,BAL +1975,AL,BOS,BOS,E,1,160,81,95,65,Y,,Y,N,796,5448,1500,284,44,134,565,741,66,58,,,709,635,3.9800000000,62,11,31,4308,1463,145,490,720,135,142,0.97,Boston Red Sox,Fenway Park II,1748587,110,109,BOS,BOS,BOS +1975,AL,CAL,ANA,W,6,161,81,72,89,N,,N,N,628,5377,1324,195,41,55,593,811,220,108,,,723,628,3.8900000000,59,19,16,4359,1386,123,613,975,184,164,0.97,California Angels,Anaheim Stadium,1058163,92,93,CAL,CAL,CAL +1975,AL,CHA,CHW,W,5,161,81,75,86,N,,N,N,655,5490,1400,209,38,94,611,800,101,54,,,703,634,3.9300000000,34,7,39,4356,1489,107,655,799,140,155,0.97,Chicago White Sox,Comiskey Park,750802,102,103,CHW,CHA,CHA +1975,AL,CLE,CLE,E,4,159,80,79,80,N,,N,N,688,5404,1409,201,25,153,525,667,106,89,,,703,612,3.8400000000,37,6,33,4305,1395,136,599,800,134,156,0.97,Cleveland Indians,Cleveland Stadium,977039,99,99,CLE,CLE,CLE +1975,AL,DET,DET,E,6,159,80,57,102,N,,N,N,570,5366,1338,171,39,125,383,872,63,57,,,786,662,4.2700000000,52,10,17,4188,1496,137,533,787,173,141,0.97,Detroit Tigers,Tiger Stadium,1058836,104,106,DET,DET,DET +1975,AL,KCA,KCR,W,2,162,81,91,71,N,,N,N,710,5491,1431,263,58,118,591,675,155,75,,,649,561,3.4700000000,52,11,25,4368,1422,108,498,815,155,151,0.97,Kansas City Royals,Royals Stadium,1151836,103,102,KCR,KCA,KCA +1975,AL,MIN,MIN,W,4,159,82,76,83,N,,N,N,724,5514,1497,215,28,121,563,746,81,48,,,736,640,4.0500000000,57,7,22,4269,1381,137,617,846,169,147,0.97,Minnesota Twins,Metropolitan Stadium,737156,102,102,MIN,MIN,MIN +1975,AL,ML4,MIL,E,5,162,81,68,94,N,,N,N,675,5378,1343,242,34,146,553,922,65,64,,,792,690,4.3400000000,36,10,34,4293,1496,133,624,643,180,162,0.97,Milwaukee Brewers,County Stadium,1213357,100,101,MIL,MIL,MIL +1975,AL,NYA,NYY,E,3,160,78,83,77,N,,N,N,681,5415,1430,230,39,110,486,710,102,59,,,588,521,3.2900000000,70,11,20,4272,1325,104,502,809,135,148,0.97,New York Yankees,Shea Stadium,1288048,99,98,NYY,NYA,NYA +1975,AL,OAK,OAK,W,1,162,81,98,64,Y,,N,N,758,5415,1376,220,33,151,609,846,183,82,,,606,526,3.2700000000,36,10,44,4344,1267,102,523,784,143,140,0.97,Oakland Athletics,Oakland Coliseum,1075518,98,96,OAK,OAK,OAK +1975,AL,TEX,TEX,W,3,162,80,79,83,N,,N,N,714,5599,1431,208,17,134,613,863,102,62,,,733,628,3.8600000000,60,16,17,4395,1456,123,518,792,191,173,0.97,Texas Rangers,Arlington Stadium,1127924,99,99,TEX,TEX,TEX +1975,NL,ATL,ATL,W,5,161,80,67,94,N,,N,N,583,5424,1323,179,28,107,543,759,55,38,,,739,621,3.9100000000,32,4,24,4290,1543,101,519,669,175,147,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,534672,103,104,ATL,ATL,ATL +1975,NL,CHN,CHC,E,5,162,81,75,87,N,,N,N,712,5470,1419,229,41,95,650,802,67,55,,,827,720,4.4900000000,27,8,33,4332,1587,130,551,850,178,152,0.97,Chicago Cubs,Wrigley Field,1034819,104,106,CHC,CHN,CHN +1975,NL,CIN,CIN,W,1,162,81,108,54,Y,,Y,Y,840,5581,1515,278,37,124,691,916,168,36,,,586,546,3.3700000000,22,8,50,4377,1422,112,487,663,102,173,0.98,Cincinnati Reds,Riverfront Stadium,2315603,102,99,CIN,CIN,CIN +1975,NL,HOU,HOU,W,6,162,81,64,97,N,,N,N,664,5515,1401,218,54,84,523,762,133,62,,,711,654,4.0400000000,39,6,25,4374,1436,106,679,839,137,166,0.97,Houston Astros,Astrodome,858002,93,93,HOU,HOU,HOU +1975,NL,LAN,LAD,W,2,162,81,88,74,N,,N,N,648,5453,1355,217,31,118,611,825,138,52,,,534,477,2.9200000000,51,18,21,4407,1215,104,448,894,127,106,0.97,Los Angeles Dodgers,Dodger Stadium,2539349,96,94,LAD,LAN,LAN +1975,NL,MON,WSN,E,5,162,81,75,87,N,,N,N,601,5518,1346,216,31,98,579,954,108,58,,,690,612,3.7200000000,30,12,25,4440,1448,102,665,831,180,179,0.97,Montreal Expos,Jarry Park,908292,104,106,MON,MON,MON +1975,NL,NYN,NYM,E,3,162,81,82,80,N,,N,N,646,5587,1430,217,34,101,501,805,32,26,,,625,552,3.3900000000,40,14,31,4398,1344,99,580,989,151,144,0.97,New York Mets,Shea Stadium,1730566,96,95,NYM,NYN,NYN +1975,NL,PHI,PHI,E,2,162,81,86,76,N,,N,N,735,5592,1506,283,42,125,610,960,126,57,,,694,618,3.8200000000,33,11,30,4365,1353,111,546,897,152,156,0.97,Philadelphia Phillies,Veterans Stadium,1909233,104,103,PHI,PHI,PHI +1975,NL,PIT,PIT,E,1,161,80,92,69,Y,,N,N,712,5489,1444,255,47,138,468,832,49,28,,,565,481,3.0100000000,43,14,31,4311,1302,79,551,768,151,147,0.97,Pittsburgh Pirates,Three Rivers Stadium,1270018,99,97,PIT,PIT,PIT +1975,NL,SDN,SDP,W,4,162,81,71,91,N,,N,N,552,5429,1324,215,22,78,506,754,85,50,,,683,566,3.4800000000,40,12,20,4389,1494,99,521,713,188,163,0.97,San Diego Padres,Jack Murphy Stadium,1281747,94,96,SDP,SDN,SDN +1975,NL,SFN,SFG,W,3,161,81,80,81,N,,N,N,659,5447,1412,235,45,84,604,775,99,47,,,671,595,3.7400000000,37,9,24,4296,1406,92,612,856,145,164,0.97,San Francisco Giants,Candlestick Park,522919,104,105,SFG,SFN,SFN +1975,NL,SLN,STL,E,3,163,82,82,80,N,,N,N,662,5597,1527,239,46,81,444,649,116,49,,,689,577,3.5700000000,33,13,36,4362,1452,98,571,824,171,140,0.97,St. Louis Cardinals,Busch Stadium II,1695270,104,105,STL,SLN,SLN +1976,AL,BAL,BAL,E,2,162,81,88,74,N,,N,N,619,5457,1326,213,28,119,519,883,150,61,,,598,542,3.3200000000,59,16,23,4404,1396,80,489,678,118,157,0.98,Baltimore Orioles,Memorial Stadium,1058609,94,93,BAL,BAL,BAL +1976,AL,BOS,BOS,E,3,162,81,83,79,N,,N,N,716,5511,1448,257,53,134,500,832,95,70,,,660,570,3.5200000000,49,13,27,4374,1495,109,409,673,139,148,0.97,Boston Red Sox,Fenway Park II,1895846,113,112,BOS,BOS,BOS +1976,AL,CAL,ANA,W,4,162,81,76,86,N,,N,N,550,5385,1265,210,23,63,534,812,126,80,,,631,551,3.3600000000,64,15,17,4431,1323,95,553,992,150,139,0.97,California Angels,Anaheim Stadium,1006774,93,94,CAL,CAL,CAL +1976,AL,CHA,CHW,W,6,161,80,64,97,N,,N,N,586,5532,1410,209,46,73,471,739,120,53,,,745,684,4.2500000000,54,10,22,4344,1460,87,600,802,130,155,0.97,Chicago White Sox,Comiskey Park,914945,101,102,CHW,CHA,CHA +1976,AL,CLE,CLE,E,4,159,79,81,78,N,,N,N,615,5412,1423,189,38,85,479,631,75,69,,,615,552,3.4700000000,30,17,46,4296,1361,80,533,928,121,159,0.98,Cleveland Indians,Cleveland Stadium,948776,98,98,CLE,CLE,CLE +1976,AL,DET,DET,E,5,161,80,74,87,N,,N,N,609,5441,1401,207,38,101,450,730,107,59,,,709,615,3.8700000000,55,12,20,4293,1426,101,550,738,168,161,0.97,Detroit Tigers,Tiger Stadium,1467020,103,105,DET,DET,DET +1976,AL,KCA,KCR,W,1,162,81,90,72,Y,,N,N,713,5540,1490,259,57,65,484,650,218,106,,,611,525,3.2100000000,41,12,35,4416,1356,83,493,735,139,147,0.97,Kansas City Royals,Royals Stadium,1680265,102,100,KCR,KCA,KCA +1976,AL,MIN,MIN,W,3,162,81,85,77,N,,N,N,743,5574,1526,222,51,81,550,714,146,75,,,704,598,3.6900000000,29,11,23,4377,1421,89,610,762,172,182,0.97,Minnesota Twins,Metropolitan Stadium,715394,103,102,MIN,MIN,MIN +1976,AL,ML4,MIL,E,6,161,81,66,95,N,,N,N,570,5396,1326,170,38,88,511,909,62,61,,,655,580,3.6400000000,45,10,27,4305,1406,99,567,677,152,160,0.97,Milwaukee Brewers,County Stadium,1012164,98,99,MIL,MIL,MIL +1976,AL,NYA,NYY,E,1,159,80,97,62,Y,,Y,N,730,5555,1496,231,36,120,470,616,163,65,,,575,516,3.1900000000,62,15,37,4365,1300,97,448,674,126,141,0.98,New York Yankees,Yankee Stadium II,2012434,100,98,NYY,NYA,NYA +1976,AL,OAK,OAK,W,2,161,81,87,74,N,,N,N,686,5353,1319,208,33,113,592,818,341,123,,,598,528,3.2600000000,39,15,29,4377,1412,96,415,711,144,130,0.97,Oakland Athletics,Oakland Coliseum,780593,95,95,OAK,OAK,OAK +1976,AL,TEX,TEX,W,4,162,81,76,86,N,,N,N,616,5555,1390,213,26,80,568,809,87,45,,,652,564,3.4500000000,63,15,15,4416,1464,106,461,773,156,142,0.97,Texas Rangers,Arlington Stadium,1164982,102,102,TEX,TEX,TEX +1976,NL,ATL,ATL,W,6,162,81,70,92,N,,N,N,620,5345,1309,170,30,82,589,811,74,61,,,700,617,3.8600000000,33,13,27,4314,1435,86,564,818,167,151,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,818179,106,108,ATL,ATL,ATL +1976,NL,CHN,CHC,E,4,162,81,75,87,N,,N,N,611,5519,1386,216,24,105,490,834,74,74,,,728,642,3.9300000000,27,12,33,4413,1511,123,490,850,140,145,0.97,Chicago Cubs,Wrigley Field,1026217,108,109,CHC,CHN,CHN +1976,NL,CIN,CIN,W,1,162,81,102,60,Y,,Y,Y,857,5702,1599,271,63,141,681,902,210,57,,,633,574,3.5100000000,33,12,45,4413,1436,100,491,790,102,157,0.98,Cincinnati Reds,Riverfront Stadium,2629708,102,100,CIN,CIN,CIN +1976,NL,HOU,HOU,W,3,162,82,80,82,N,,N,N,625,5464,1401,195,50,66,530,719,150,57,,,657,571,3.5600000000,42,17,29,4332,1349,82,662,780,140,155,0.97,Houston Astros,Astrodome,886146,91,91,HOU,HOU,HOU +1976,NL,LAN,LAD,W,2,162,81,92,70,N,,N,N,608,5472,1371,200,34,91,486,744,144,55,,,543,493,3.0200000000,47,17,28,4410,1330,97,479,747,128,154,0.98,Los Angeles Dodgers,Dodger Stadium,2386301,98,97,LAD,LAN,LAN +1976,NL,MON,WSN,E,6,162,80,55,107,N,,N,N,531,5428,1275,224,32,94,433,841,86,44,,,734,638,3.9900000000,26,10,21,4320,1442,89,659,783,147,179,0.97,Montreal Expos,Jarry Park,646704,105,107,MON,MON,MON +1976,NL,NYN,NYM,E,3,162,82,86,76,N,,N,N,615,5415,1334,198,34,102,561,797,66,58,,,538,473,2.9400000000,53,18,25,4347,1248,97,419,1025,131,116,0.97,New York Mets,Shea Stadium,1468754,94,94,NYM,NYN,NYN +1976,NL,PHI,PHI,E,1,162,81,101,61,Y,,N,N,770,5528,1505,259,45,110,542,793,127,70,,,557,499,3.0800000000,34,9,44,4377,1377,98,397,918,115,148,0.98,Philadelphia Phillies,Veterans Stadium,2480150,104,102,PHI,PHI,PHI +1976,NL,PIT,PIT,E,2,162,81,92,70,N,,N,N,708,5604,1499,249,56,110,433,807,130,45,,,630,547,3.3600000000,45,12,35,4398,1402,95,460,762,163,142,0.97,Pittsburgh Pirates,Three Rivers Stadium,1025945,100,99,PIT,PIT,PIT +1976,NL,SDN,SDP,W,5,162,80,73,89,N,,N,N,570,5369,1327,216,37,64,488,716,92,46,,,662,581,3.6500000000,47,11,18,4296,1368,87,543,652,141,148,0.97,San Diego Padres,Jack Murphy Stadium,1458478,92,94,SDP,SDN,SDN +1976,NL,SFN,SFG,W,4,162,81,74,88,N,,N,N,595,5452,1340,211,37,85,518,778,88,55,,,686,573,3.5300000000,27,18,31,4383,1464,68,518,746,183,153,0.97,San Francisco Giants,Candlestick Park,626868,103,103,SFG,SFN,SFN +1976,NL,SLN,STL,E,5,162,81,72,90,N,,N,N,629,5516,1432,243,57,63,512,860,123,55,,,671,581,3.6000000000,35,15,26,4359,1416,91,581,731,174,163,0.97,St. Louis Cardinals,Busch Stadium II,1207079,101,101,STL,SLN,SLN +1977,AL,BAL,BAL,E,2,161,81,97,64,N,,N,N,719,5494,1433,231,25,148,560,945,90,51,,,653,603,3.7400000000,65,11,23,4353,1414,124,494,737,106,189,0.98,Baltimore Orioles,Memorial Stadium,1195769,94,94,BAL,BAL,BAL +1977,AL,BOS,BOS,E,2,161,80,97,64,N,,N,N,859,5510,1551,258,56,213,528,905,66,47,,,712,652,4.1100000000,40,13,40,4284,1555,158,378,758,132,162,0.97,Boston Red Sox,Fenway Park II,2074549,113,112,BOS,BOS,BOS +1977,AL,CAL,ANA,W,5,162,81,74,88,N,,N,N,675,5410,1380,233,40,131,542,880,159,89,,,695,594,3.7200000000,53,13,26,4311,1383,136,572,965,147,137,0.97,California Angels,Anaheim Stadium,1432633,96,96,CAL,CAL,CAL +1977,AL,CHA,CHW,W,3,162,81,90,72,N,,N,N,844,5633,1568,254,52,192,559,666,42,44,,,771,682,4.2500000000,34,3,40,4332,1557,136,516,842,159,125,0.97,Chicago White Sox,Comiskey Park,1657135,100,101,CHW,CHA,CHA +1977,AL,CLE,CLE,E,5,161,81,71,90,N,,N,N,676,5491,1476,221,46,100,531,688,87,87,,,739,661,4.1000000000,45,8,30,4356,1441,136,550,876,130,145,0.97,Cleveland Indians,Cleveland Stadium,900365,96,97,CLE,CLE,CLE +1977,AL,DET,DET,E,4,162,81,74,88,N,,N,N,714,5604,1480,228,45,166,452,764,60,46,,,751,669,4.1300000000,44,3,23,4371,1526,162,470,784,140,153,0.97,Detroit Tigers,Tiger Stadium,1359856,105,105,DET,DET,DET +1977,AL,KCA,KCR,W,1,162,81,102,60,Y,,N,N,822,5594,1549,299,77,146,522,687,170,87,,,651,571,3.5200000000,41,15,42,4380,1377,110,499,850,137,145,0.97,Kansas City Royals,Royals Stadium,1852603,102,100,KCR,KCA,KCA +1977,AL,MIN,MIN,W,4,161,80,84,77,N,,N,N,867,5639,1588,273,60,123,563,754,105,65,,,776,699,4.3600000000,35,4,25,4326,1546,151,507,737,144,184,0.97,Minnesota Twins,Metropolitan Stadium,1162727,99,99,MIN,MIN,MIN +1977,AL,ML4,MIL,E,6,162,81,67,95,N,,N,N,639,5517,1425,255,46,125,443,862,85,67,,,765,687,4.3200000000,38,6,25,4293,1461,136,566,719,139,165,0.97,Milwaukee Brewers,County Stadium,1114938,100,100,MIL,MIL,MIL +1977,AL,NYA,NYY,E,1,162,81,100,62,Y,,Y,Y,831,5605,1576,267,47,184,533,681,93,57,,,651,581,3.6100000000,52,16,34,4347,1395,139,486,758,132,151,0.97,New York Yankees,Yankee Stadium II,2103092,99,97,NYY,NYA,NYA +1977,AL,OAK,OAK,W,7,161,81,63,98,N,,N,N,605,5358,1284,176,37,117,516,910,176,89,,,749,645,4.0400000000,32,4,26,4308,1459,145,560,788,190,136,0.97,Oakland Athletics,Oakland Coliseum,495599,97,98,OAK,OAK,OAK +1977,AL,SEA,SEA,W,6,162,81,64,98,N,,N,N,624,5460,1398,218,33,133,426,769,110,67,,,855,769,4.8300000000,18,1,31,4299,1508,194,578,785,147,162,0.97,Seattle Mariners,Kingdome,1338511,99,101,SEA,SEA,SEA +1977,AL,TEX,TEX,W,2,162,81,94,68,N,,N,N,767,5541,1497,265,39,135,596,904,154,85,,,657,582,3.5600000000,49,17,31,4416,1412,134,471,864,117,156,0.98,Texas Rangers,Arlington Stadium,1250722,101,101,TEX,TEX,TEX +1977,AL,TOR,TOR,E,7,161,80,54,107,N,,N,N,605,5418,1367,230,41,100,499,819,65,55,,,822,725,4.5700000000,40,3,20,4284,1538,152,623,771,163,133,0.97,Toronto Blue Jays,Exhibition Stadium,1701052,101,103,TOR,TOR,TOR +1977,NL,ATL,ATL,W,6,162,81,61,101,N,,N,N,678,5534,1404,218,20,139,537,876,82,53,,,895,779,4.8500000000,28,5,31,4335,1581,169,701,915,175,127,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,872464,112,114,ATL,ATL,ATL +1977,NL,CHN,CHC,E,4,162,81,81,81,N,,N,N,692,5604,1489,271,37,111,534,796,64,45,,,739,654,4.0100000000,16,10,44,4404,1500,128,489,942,153,147,0.97,Chicago Cubs,Wrigley Field,1439834,111,112,CHC,CHN,CHN +1977,NL,CIN,CIN,W,2,162,81,88,74,N,,N,N,802,5524,1513,269,42,181,600,911,170,64,,,725,672,4.2100000000,33,12,32,4311,1469,156,544,868,95,154,0.98,Cincinnati Reds,Riverfront Stadium,2519670,102,101,CIN,CIN,CIN +1977,NL,HOU,HOU,W,3,162,81,81,81,N,,N,N,680,5530,1405,263,60,114,515,839,187,72,,,650,576,3.5400000000,37,11,28,4395,1384,110,545,871,142,136,0.97,Houston Astros,Astrodome,1109560,91,91,HOU,HOU,HOU +1977,NL,LAN,LAD,W,1,162,81,98,64,Y,,Y,N,769,5589,1484,223,28,191,588,896,114,62,,,582,528,3.2200000000,34,13,39,4425,1393,119,438,930,124,160,0.98,Los Angeles Dodgers,Dodger Stadium,2955087,100,98,LAD,LAN,LAN +1977,NL,MON,WSN,E,5,162,81,75,87,N,,N,N,665,5675,1474,294,50,138,478,877,88,50,,,736,660,4.0100000000,31,11,33,4443,1426,135,579,856,129,128,0.98,Montreal Expos,Stade Olympique,1433757,97,97,MON,MON,MON +1977,NL,NYN,NYM,E,6,162,79,64,98,N,,N,N,587,5410,1319,227,30,88,529,887,98,81,,,663,600,3.7700000000,27,12,28,4299,1378,118,490,911,134,132,0.97,New York Mets,Shea Stadium,1066825,95,95,NYM,NYN,NYN +1977,NL,PHI,PHI,E,1,162,81,101,61,Y,,N,N,847,5546,1548,266,56,186,573,806,135,68,,,668,600,3.7100000000,31,7,47,4365,1451,134,482,856,120,168,0.98,Philadelphia Phillies,Veterans Stadium,2700070,105,103,PHI,PHI,PHI +1977,NL,PIT,PIT,E,2,162,81,96,66,N,,N,N,734,5662,1550,278,57,133,474,878,260,120,,,665,594,3.6100000000,25,15,39,4443,1406,149,485,890,145,137,0.97,Pittsburgh Pirates,Three Rivers Stadium,1237349,102,101,PIT,PIT,PIT +1977,NL,SDN,SDP,W,5,162,81,69,93,N,,N,N,692,5602,1397,245,49,120,602,1057,133,57,,,834,722,4.4300000000,6,5,44,4398,1556,160,673,827,189,142,0.97,San Diego Padres,Jack Murphy Stadium,1376269,90,91,SDP,SDN,SDN +1977,NL,SFN,SFG,W,4,162,81,75,87,N,,N,N,673,5497,1392,227,41,134,568,842,90,59,,,711,608,3.7500000000,27,10,33,4377,1501,114,529,854,178,136,0.97,San Francisco Giants,Candlestick Park,700056,99,100,SFG,SFN,SFN +1977,NL,SLN,STL,E,3,162,83,83,79,N,,N,N,737,5527,1490,252,56,96,489,823,134,112,,,688,612,3.8100000000,26,10,31,4338,1420,139,532,768,139,174,0.97,St. Louis Cardinals,Busch Stadium II,1659287,99,99,STL,SLN,SLN +1978,AL,BAL,BAL,E,4,161,81,90,71,N,,N,N,659,5422,1397,248,19,154,552,864,75,61,,,633,565,3.5600000000,65,16,33,4287,1340,107,509,754,110,166,0.98,Baltimore Orioles,Memorial Stadium,1051724,94,93,BAL,BAL,BAL +1978,AL,BOS,BOS,E,2,163,82,99,64,N,,N,N,796,5587,1493,270,46,172,582,835,74,51,,,657,579,3.5400000000,57,15,26,4416,1530,137,464,706,146,171,0.97,Boston Red Sox,Fenway Park II,2320643,112,110,BOS,BOS,BOS +1978,AL,CAL,ANA,W,2,162,81,87,75,N,,N,N,691,5472,1417,226,28,108,539,682,86,69,,,666,590,3.6500000000,44,13,33,4365,1382,125,599,892,136,136,0.97,California Angels,Anaheim Stadium,1755386,96,96,CAL,CAL,CAL +1978,AL,CHA,CHW,W,5,161,80,71,90,N,,N,N,634,5393,1423,221,41,106,409,625,83,68,,,731,659,4.2100000000,38,9,33,4227,1380,128,586,710,138,130,0.97,Chicago White Sox,Comiskey Park,1491100,101,102,CHW,CHA,CHA +1978,AL,CLE,CLE,E,6,159,78,69,90,N,,N,N,639,5365,1400,223,45,106,488,698,64,63,,,694,621,3.9700000000,36,6,28,4221,1397,100,568,739,121,142,0.98,Cleveland Indians,Cleveland Stadium,800584,99,100,CLE,CLE,CLE +1978,AL,DET,DET,E,5,162,81,86,76,N,,N,N,714,5601,1520,218,34,129,563,695,90,38,,,653,588,3.6400000000,60,12,21,4365,1441,135,503,684,117,177,0.98,Detroit Tigers,Tiger Stadium,1714893,103,103,DET,DET,DET +1978,AL,KCA,KCR,W,1,162,81,92,70,Y,,N,N,743,5474,1469,305,59,98,498,644,216,84,,,634,550,3.4400000000,53,14,33,4317,1350,108,478,657,150,153,0.97,Kansas City Royals,Royals Stadium,2255493,103,102,KCR,KCA,KCA +1978,AL,MIN,MIN,W,4,162,81,73,89,N,,N,N,666,5522,1472,259,47,82,604,684,99,56,,,678,598,3.6900000000,48,9,26,4377,1468,102,520,703,146,171,0.97,Minnesota Twins,Metropolitan Stadium,787878,102,102,MIN,MIN,MIN +1978,AL,ML4,MIL,E,3,162,81,93,69,N,,N,N,804,5536,1530,265,38,173,520,805,95,53,,,650,582,3.6500000000,62,19,24,4308,1442,109,398,577,150,144,0.97,Milwaukee Brewers,County Stadium,1601406,100,100,MIL,MIL,MIL +1978,AL,NYA,NYY,E,1,163,81,100,63,Y,,Y,Y,735,5583,1489,228,38,125,505,695,98,42,,,582,516,3.1800000000,39,16,36,4380,1321,111,478,817,113,134,0.98,New York Yankees,Yankee Stadium II,2335871,97,96,NYY,NYA,NYA +1978,AL,OAK,OAK,W,6,162,80,69,93,N,,N,N,532,5321,1304,200,31,100,433,800,144,117,,,690,576,3.6200000000,26,11,29,4299,1401,106,582,750,179,145,0.97,Oakland Athletics,Oakland Coliseum,526999,94,96,OAK,OAK,OAK +1978,AL,SEA,SEA,W,7,160,81,56,104,N,,N,N,614,5358,1327,229,37,97,522,702,123,47,,,834,736,4.6700000000,28,4,20,4257,1540,155,567,630,141,174,0.97,Seattle Mariners,Kingdome,877440,100,101,SEA,SEA,SEA +1978,AL,TEX,TEX,W,2,162,82,87,75,N,,N,N,692,5347,1353,216,36,132,624,779,196,91,,,632,544,3.3600000000,54,12,25,4368,1431,108,421,776,153,140,0.97,Texas Rangers,Arlington Stadium,1447963,100,100,TEX,TEX,TEX +1978,AL,TOR,TOR,E,7,161,81,59,102,N,,N,N,590,5430,1358,217,39,98,448,645,28,52,,,775,721,4.5400000000,35,5,23,4287,1529,149,614,758,130,163,0.97,Toronto Blue Jays,Exhibition Stadium,1562585,101,104,TOR,TOR,TOR +1978,NL,ATL,ATL,W,6,162,81,69,93,N,,N,N,600,5381,1313,191,39,123,550,874,90,65,,,750,653,4.0800000000,29,12,32,4320,1404,132,624,848,153,126,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,904494,112,114,ATL,ATL,ATL +1978,NL,CHN,CHC,E,3,162,82,79,83,N,,N,N,664,5532,1461,224,48,72,562,746,110,58,,,724,655,4.0500000000,24,7,38,4365,1475,125,539,768,144,154,0.97,Chicago Cubs,Wrigley Field,1525311,112,112,CHC,CHN,CHN +1978,NL,CIN,CIN,W,2,161,80,92,69,N,,N,N,710,5392,1378,270,32,136,636,899,137,58,,,688,613,3.8100000000,16,10,46,4344,1437,122,567,908,134,120,0.97,Cincinnati Reds,Riverfront Stadium,2532497,100,100,CIN,CIN,CIN +1978,NL,HOU,HOU,W,5,162,81,74,88,N,,N,N,605,5458,1408,231,45,70,434,743,178,59,,,634,581,3.6300000000,48,17,23,4320,1328,86,578,930,132,109,0.97,Houston Astros,Astrodome,1126145,92,92,HOU,HOU,HOU +1978,NL,LAN,LAD,W,1,162,81,95,67,Y,,Y,N,727,5437,1435,251,27,149,610,818,137,52,,,573,499,3.1200000000,46,16,38,4320,1362,107,440,800,140,138,0.97,Los Angeles Dodgers,Dodger Stadium,3347845,100,98,LAD,LAN,LAN +1978,NL,MON,WSN,E,4,162,80,76,86,N,,N,N,633,5530,1404,269,31,121,396,881,80,42,,,611,549,3.4200000000,42,13,32,4338,1332,117,572,740,134,150,0.97,Montreal Expos,Stade Olympique,1427007,99,98,MON,MON,MON +1978,NL,NYN,NYM,E,6,162,80,66,96,N,,N,N,607,5433,1332,227,47,86,549,829,100,77,,,690,626,3.8700000000,21,7,26,4365,1447,114,531,775,132,160,0.97,New York Mets,Shea Stadium,1007328,96,97,NYM,NYN,NYN +1978,NL,PHI,PHI,E,1,162,82,90,72,Y,,N,N,708,5448,1404,248,32,133,552,866,152,58,,,586,531,3.3300000000,38,9,29,4308,1343,118,393,813,104,156,0.98,Philadelphia Phillies,Veterans Stadium,2583389,101,100,PHI,PHI,PHI +1978,NL,PIT,PIT,E,2,161,81,88,73,N,,N,N,684,5406,1390,239,54,115,480,874,213,90,,,637,547,3.4100000000,30,13,44,4332,1366,103,499,880,166,133,0.97,Pittsburgh Pirates,Three Rivers Stadium,964106,105,104,PIT,PIT,PIT +1978,NL,SDN,SDP,W,4,162,81,84,78,N,,N,N,591,5360,1349,208,42,75,536,848,152,70,,,598,522,3.2800000000,21,10,55,4299,1385,74,483,744,160,171,0.97,San Diego Padres,Jack Murphy Stadium,1670107,91,92,SDP,SDN,SDN +1978,NL,SFN,SFG,W,3,162,81,89,73,N,,N,N,613,5364,1331,240,41,117,554,814,87,54,,,594,534,3.3000000000,42,17,29,4365,1377,84,453,840,146,118,0.97,San Francisco Giants,Candlestick Park,1740477,96,96,SFG,SFN,SFN +1978,NL,SLN,STL,E,5,162,81,69,93,N,,N,N,600,5415,1351,263,44,79,420,713,97,42,,,657,572,3.5800000000,32,13,22,4311,1300,94,600,859,136,155,0.97,St. Louis Cardinals,Busch Stadium II,1278215,99,99,STL,SLN,SLN +1979,AL,BAL,BAL,E,1,159,79,102,57,Y,,Y,N,757,5371,1401,258,24,181,608,847,99,49,,,582,519,3.2600000000,52,12,30,4302,1279,133,467,786,125,161,0.98,Baltimore Orioles,Memorial Stadium,1681009,97,95,BAL,BAL,BAL +1979,AL,BOS,BOS,E,3,160,80,91,69,N,,N,N,841,5538,1567,310,34,194,512,708,60,43,,,711,641,4.0300000000,47,11,29,4293,1487,133,463,731,142,166,0.97,Boston Red Sox,Fenway Park II,2353114,106,106,BOS,BOS,BOS +1979,AL,CAL,ANA,W,1,162,81,88,74,Y,,N,N,866,5550,1563,242,43,164,589,843,100,53,,,768,692,4.3400000000,46,9,33,4308,1463,131,573,820,135,172,0.97,California Angels,Anaheim Stadium,2523575,96,96,CAL,CAL,CAL +1979,AL,CHA,CHW,W,5,160,79,73,87,N,,N,N,730,5463,1505,290,33,127,454,668,97,62,,,748,642,4.1000000000,28,9,37,4227,1365,114,618,675,173,142,0.97,Chicago White Sox,Comiskey Park,1280702,100,101,CHW,CHA,CHA +1979,AL,CLE,CLE,E,6,161,81,81,80,N,,N,N,760,5376,1388,206,29,138,657,786,143,90,,,805,727,4.5700000000,28,7,32,4293,1502,138,570,781,126,149,0.97,Cleveland Indians,Cleveland Stadium,1011644,101,101,CLE,CLE,CLE +1979,AL,DET,DET,E,5,161,80,85,76,N,,N,N,770,5375,1446,221,35,164,575,814,176,86,,,738,675,4.2700000000,25,5,37,4269,1429,167,547,802,120,184,0.98,Detroit Tigers,Tiger Stadium,1630929,103,103,DET,DET,DET +1979,AL,KCA,KCR,W,2,162,81,85,77,N,,N,N,851,5653,1596,286,79,116,528,675,207,76,,,816,716,4.4500000000,42,7,27,4344,1477,165,536,640,146,160,0.97,Kansas City Royals,Royals Stadium,2261845,102,101,KCR,KCA,KCA +1979,AL,MIN,MIN,W,4,162,81,82,80,N,,N,N,764,5544,1544,256,46,112,526,693,66,45,,,725,663,4.1300000000,31,6,33,4332,1590,128,452,721,134,203,0.97,Minnesota Twins,Metropolitan Stadium,1070521,104,104,MIN,MIN,MIN +1979,AL,ML4,MIL,E,2,161,81,95,66,N,,N,N,807,5536,1552,291,41,185,549,745,100,53,,,722,644,4.0300000000,61,12,23,4317,1563,162,381,580,127,153,0.98,Milwaukee Brewers,County Stadium,1918343,100,99,MIL,MIL,MIL +1979,AL,NYA,NYY,E,4,160,81,89,71,N,,N,N,734,5421,1443,226,40,150,509,590,65,46,,,672,609,3.8300000000,43,10,37,4296,1446,123,455,731,122,183,0.98,New York Yankees,Yankee Stadium II,2537765,98,96,NYY,NYA,NYA +1979,AL,OAK,OAK,W,7,162,81,54,108,N,,N,N,573,5348,1276,188,32,108,482,751,104,69,,,860,754,4.7500000000,41,4,20,4287,1606,147,654,726,174,137,0.97,Oakland Athletics,Oakland Coliseum,306763,94,96,OAK,OAK,OAK +1979,AL,SEA,SEA,W,6,162,81,67,95,N,,N,N,711,5544,1490,250,52,132,515,725,126,52,,,820,732,4.5800000000,37,7,26,4314,1567,165,571,736,141,170,0.97,Seattle Mariners,Kingdome,844447,102,104,SEA,SEA,SEA +1979,AL,TEX,TEX,W,3,162,81,83,79,N,,N,N,750,5562,1549,252,26,140,461,607,79,51,,,698,616,3.8600000000,26,10,42,4311,1371,135,532,773,130,151,0.97,Texas Rangers,Arlington Stadium,1519671,99,98,TEX,TEX,TEX +1979,AL,TOR,TOR,E,7,162,81,53,109,N,,N,N,613,5423,1362,253,34,95,448,663,75,56,,,862,759,4.8200000000,44,7,11,4251,1537,165,594,613,158,187,0.97,Toronto Blue Jays,Exhibition Stadium,1431651,100,102,TOR,TOR,TOR +1979,NL,ATL,ATL,W,6,160,79,66,94,N,,N,N,669,5422,1389,220,28,126,490,818,98,50,,,763,653,4.1800000000,32,3,34,4221,1496,132,494,779,183,139,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,769465,107,109,ATL,ATL,ATL +1979,NL,CHN,CHC,E,5,162,81,80,82,N,,N,N,706,5550,1494,250,43,135,478,762,73,52,,,707,623,3.8800000000,20,11,44,4338,1500,127,521,933,159,163,0.97,Chicago Cubs,Wrigley Field,1648587,110,111,CHC,CHN,CHN +1979,NL,CIN,CIN,W,1,161,80,90,71,Y,,N,N,731,5477,1445,266,31,132,614,902,99,47,,,644,573,3.5800000000,27,10,40,4320,1415,103,485,773,124,152,0.98,Cincinnati Reds,Riverfront Stadium,2356933,101,101,CIN,CIN,CIN +1979,NL,HOU,HOU,W,2,162,81,89,73,N,,N,N,583,5394,1382,224,52,49,461,745,190,95,,,582,514,3.2000000000,55,19,31,4341,1278,90,504,854,137,146,0.97,Houston Astros,Astrodome,1900312,94,94,HOU,HOU,HOU +1979,NL,LAN,LAD,W,3,162,81,79,83,N,,N,N,739,5490,1443,220,24,183,556,834,106,46,,,717,615,3.8300000000,30,6,34,4332,1425,101,555,811,118,123,0.98,Los Angeles Dodgers,Dodger Stadium,2860954,99,98,LAD,LAN,LAN +1979,NL,MON,WSN,E,2,160,81,95,65,N,,N,N,701,5465,1445,273,42,143,432,890,121,56,,,581,505,3.1400000000,33,18,39,4341,1379,116,450,813,131,123,0.97,Montreal Expos,Stade Olympique,2102173,99,98,MON,MON,MON +1979,NL,NYN,NYM,E,6,163,82,63,99,N,,N,N,593,5591,1399,255,41,74,498,817,135,79,,,706,632,3.8400000000,16,10,36,4446,1486,120,607,819,140,168,0.97,New York Mets,Shea Stadium,788905,96,97,NYM,NYN,NYN +1979,NL,PHI,PHI,E,4,163,81,84,78,N,,N,N,683,5463,1453,250,53,119,602,764,128,76,,,718,666,4.1600000000,33,14,29,4323,1455,135,477,787,106,148,0.98,Philadelphia Phillies,Veterans Stadium,2775011,103,102,PHI,PHI,PHI +1979,NL,PIT,PIT,E,1,163,81,98,64,Y,,Y,Y,775,5661,1541,264,52,148,483,855,180,66,,,643,566,3.4100000000,24,7,52,4479,1424,125,504,904,134,163,0.97,Pittsburgh Pirates,Three Rivers Stadium,1435454,105,105,PIT,PIT,PIT +1979,NL,SDN,SDP,W,5,161,81,68,93,N,,N,N,603,5446,1316,193,53,93,534,770,100,58,,,681,596,3.6900000000,29,7,25,4359,1438,108,513,779,140,154,0.97,San Diego Padres,Jack Murphy Stadium,1456967,93,94,SDP,SDN,SDN +1979,NL,SFN,SFG,W,4,162,81,71,91,N,,N,N,672,5395,1328,192,36,125,580,925,140,73,,,751,664,4.1600000000,25,6,34,4308,1484,143,577,880,161,138,0.97,San Francisco Giants,Candlestick Park,1456402,93,94,SFG,SFN,SFN +1979,NL,SLN,STL,E,3,163,82,86,76,N,,N,N,731,5734,1594,279,63,100,460,838,116,69,,,693,614,3.7200000000,38,10,25,4458,1449,127,501,788,132,166,0.98,St. Louis Cardinals,Busch Stadium II,1627256,102,102,STL,SLN,SLN +1980,AL,BAL,BAL,E,2,162,81,100,62,N,,N,N,805,5585,1523,258,29,156,587,766,111,38,,,640,590,3.6400000000,42,10,41,4380,1438,134,507,789,95,178,0.98,Baltimore Orioles,Memorial Stadium,1797438,99,98,BAL,BAL,BAL +1980,AL,BOS,BOS,E,5,160,81,83,77,N,,N,N,757,5603,1588,297,36,162,475,720,79,48,,,767,701,4.3800000000,30,8,43,4323,1557,129,481,696,149,206,0.97,Boston Red Sox,Fenway Park II,1956092,106,105,BOS,BOS,BOS +1980,AL,CAL,ANA,W,6,160,81,65,95,N,,N,N,698,5443,1442,236,32,106,539,889,91,63,,,797,717,4.5200000000,22,6,30,4284,1548,141,529,725,134,144,0.97,California Angels,Anaheim Stadium,2297327,97,97,CAL,CAL,CAL +1980,AL,CHA,CHW,W,5,162,81,70,90,N,,N,N,587,5444,1408,255,38,91,399,670,68,54,,,722,625,3.9200000000,32,12,42,4305,1434,108,563,724,171,162,0.97,Chicago White Sox,Comiskey Park,1200365,100,100,CHW,CHA,CHA +1980,AL,CLE,CLE,E,6,160,79,79,81,N,,N,N,738,5470,1517,221,40,89,617,625,118,58,,,807,743,4.6800000000,35,8,32,4284,1519,137,552,843,105,143,0.98,Cleveland Indians,Cleveland Stadium,1033827,101,102,CLE,CLE,CLE +1980,AL,DET,DET,E,4,163,82,84,78,N,,N,N,830,5648,1543,232,53,143,645,844,75,68,,,757,693,4.2500000000,40,9,30,4401,1505,152,558,741,129,165,0.97,Detroit Tigers,Tiger Stadium,1785293,102,102,DET,DET,DET +1980,AL,KCA,KCR,W,1,162,81,97,65,Y,,Y,N,809,5714,1633,266,59,115,508,709,185,43,,,694,621,3.8300000000,37,10,42,4377,1496,129,465,614,141,150,0.97,Kansas City Royals,Royals Stadium,2288714,100,100,KCR,KCA,KCA +1980,AL,MIN,MIN,W,3,161,80,77,84,N,,N,N,670,5530,1468,252,46,99,436,703,62,46,,,724,634,3.9300000000,35,9,30,4353,1502,120,468,744,146,192,0.97,Minnesota Twins,Metropolitan Stadium,769206,108,108,MIN,MIN,MIN +1980,AL,ML4,MIL,E,3,162,82,86,76,N,,N,N,811,5653,1555,298,36,203,455,745,131,56,,,682,598,3.7100000000,48,14,30,4350,1530,137,420,575,147,189,0.97,Milwaukee Brewers,County Stadium,1857408,97,96,MIL,MIL,MIL +1980,AL,NYA,NYY,E,1,162,81,103,59,Y,,N,N,820,5553,1484,239,34,189,643,739,86,36,,,662,582,3.5800000000,29,15,50,4392,1433,102,463,845,138,160,0.97,New York Yankees,Yankee Stadium II,2627417,98,97,NYY,NYA,NYA +1980,AL,OAK,OAK,W,2,162,81,83,79,N,,N,N,686,5495,1424,212,35,137,506,824,175,82,,,642,566,3.4600000000,94,9,13,4413,1347,142,521,769,130,115,0.97,Oakland Athletics,Oakland Coliseum,842259,93,93,OAK,OAK,OAK +1980,AL,SEA,SEA,W,7,163,81,59,103,N,,N,N,610,5489,1359,211,35,104,483,727,116,62,,,793,709,4.3800000000,31,7,26,4371,1565,159,540,703,149,189,0.97,Seattle Mariners,Kingdome,836204,101,103,SEA,SEA,SEA +1980,AL,TEX,TEX,W,4,163,80,76,85,N,,N,N,756,5690,1616,263,27,124,480,589,91,49,,,752,648,4.0200000000,35,6,25,4353,1561,119,519,890,147,169,0.97,Texas Rangers,Arlington Stadium,1198175,97,96,TEX,TEX,TEX +1980,AL,TOR,TOR,E,7,162,81,67,95,N,,N,N,624,5571,1398,249,53,126,448,813,67,72,,,762,683,4.1900000000,39,9,23,4398,1523,135,635,705,133,206,0.97,Toronto Blue Jays,Exhibition Stadium,1400327,105,107,TOR,TOR,TOR +1980,NL,ATL,ATL,W,4,161,80,81,80,N,,N,N,630,5402,1352,226,22,144,434,899,73,52,,,660,598,3.7700000000,29,9,37,4284,1397,131,454,696,162,156,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1048411,103,103,ATL,ATL,ATL +1980,NL,CHN,CHC,E,6,162,81,64,98,N,,N,N,614,5619,1411,251,35,107,471,912,93,64,,,728,639,3.8900000000,13,6,35,4437,1525,109,589,923,174,149,0.97,Chicago Cubs,Wrigley Field,1206776,107,109,CHC,CHN,CHN +1980,NL,CIN,CIN,W,3,163,82,89,73,N,,N,N,707,5516,1445,256,45,113,537,852,156,43,,,670,624,3.8500000000,30,12,37,4377,1404,113,506,833,106,144,0.98,Cincinnati Reds,Riverfront Stadium,2022450,101,100,CIN,CIN,CIN +1980,NL,HOU,HOU,W,1,163,81,93,70,Y,,N,N,637,5566,1455,231,67,75,540,755,194,74,,,589,510,3.1000000000,31,18,41,4446,1367,69,466,929,140,145,0.97,Houston Astros,Astrodome,2278217,92,91,HOU,HOU,HOU +1980,NL,LAN,LAD,W,2,163,82,92,71,N,,N,N,663,5568,1462,209,24,148,492,846,123,72,,,591,532,3.2500000000,24,19,42,4416,1358,105,480,835,123,149,0.98,Los Angeles Dodgers,Dodger Stadium,3249287,99,98,LAD,LAN,LAN +1980,NL,MON,WSN,E,2,162,80,90,72,N,,N,N,694,5465,1407,250,61,114,547,865,237,82,,,629,563,3.4800000000,33,15,36,4368,1447,100,460,823,144,126,0.97,Montreal Expos,Stade Olympique,2208175,100,99,MON,MON,MON +1980,NL,NYN,NYM,E,5,162,82,67,95,N,,N,N,611,5478,1407,218,41,61,501,840,158,99,,,702,621,3.8500000000,17,9,33,4353,1473,140,510,886,154,132,0.97,New York Mets,Shea Stadium,1192073,97,98,NYM,NYN,NYN +1980,NL,PHI,PHI,E,1,162,81,91,71,Y,,Y,Y,728,5625,1517,272,54,117,472,708,140,62,,,639,564,3.4300000000,25,8,40,4440,1419,87,530,889,136,136,0.97,Philadelphia Phillies,Veterans Stadium,2651650,105,105,PHI,PHI,PHI +1980,NL,PIT,PIT,E,3,162,81,83,79,N,,N,N,666,5517,1469,249,38,116,452,760,209,102,,,646,580,3.5800000000,25,8,43,4374,1422,110,451,832,137,154,0.97,Pittsburgh Pirates,Three Rivers Stadium,1646757,103,102,PIT,PIT,PIT +1980,NL,SDN,SDP,W,6,163,81,73,89,N,,N,N,591,5540,1410,195,43,67,563,791,239,73,,,654,595,3.6500000000,19,9,39,4398,1474,97,536,728,131,157,0.98,San Diego Padres,Jack Murphy Stadium,1139026,94,95,SDP,SDN,SDN +1980,NL,SFN,SFG,W,5,161,81,75,86,N,,N,N,573,5368,1310,199,44,80,509,840,100,58,,,634,557,3.4600000000,27,10,35,4344,1446,92,492,811,156,124,0.97,San Francisco Giants,Candlestick Park,1096115,97,98,SFG,SFN,SFN +1980,NL,SLN,STL,E,4,162,81,74,88,N,,N,N,738,5608,1541,300,49,101,451,781,117,54,,,710,632,3.9300000000,34,9,27,4341,1454,90,495,664,122,174,0.98,St. Louis Cardinals,Busch Stadium II,1385147,104,103,STL,SLN,SLN +1981,AL,BAL,BAL,E,2,105,55,59,46,N,,N,N,429,3516,883,165,11,88,404,454,41,34,,,437,386,3.7000000000,25,10,23,2820,923,83,347,489,68,114,0.98,Baltimore Orioles,Memorial Stadium,1024247,100,99,BAL,BAL,BAL +1981,AL,BOS,BOS,E,5,108,53,59,49,N,,N,N,519,3820,1052,168,17,90,378,520,32,31,,,481,418,3.8100000000,19,4,24,2961,983,90,354,536,91,108,0.97,Boston Red Sox,Fenway Park II,1060379,107,106,BOS,BOS,BOS +1981,AL,CAL,ANA,W,5,110,54,51,59,N,,N,N,476,3688,944,134,16,97,393,571,44,33,,,453,399,3.7000000000,27,5,19,2914,958,81,323,426,101,120,0.97,California Angels,Anaheim Stadium,1441545,100,99,CAL,CAL,CAL +1981,AL,CHA,CHW,W,3,106,49,54,52,N,,N,N,476,3615,982,135,27,76,322,518,86,44,,,423,363,3.4700000000,20,8,23,2822,891,73,336,529,87,113,0.97,Chicago White Sox,Comiskey Park,946651,98,98,CHW,CHA,CHA +1981,AL,CLE,CLE,E,6,103,54,52,51,N,,N,N,431,3507,922,150,21,39,343,379,119,37,,,442,401,3.8800000000,33,10,13,2793,989,67,311,569,87,91,0.97,Cleveland Indians,Cleveland Stadium,661395,100,100,CLE,CLE,CLE +1981,AL,DET,DET,E,3,109,55,60,49,N,,N,N,427,3600,922,148,29,65,404,500,61,37,,,404,380,3.5300000000,33,13,22,2907,840,83,373,476,65,109,0.98,Detroit Tigers,Tiger Stadium,1149144,104,103,DET,DET,DET +1981,AL,KCA,KCR,W,4,103,47,50,53,Y,,N,N,397,3560,952,169,29,61,301,419,100,53,,,405,365,3.5600000000,24,8,24,2767,909,75,273,404,72,94,0.98,Kansas City Royals,Royals Stadium,1279403,99,98,KCR,KCA,KCA +1981,AL,MIN,MIN,W,7,110,61,41,68,N,,N,N,378,3676,884,147,36,47,275,497,34,27,,,486,433,3.9800000000,13,6,22,2937,1021,79,376,500,93,103,0.97,Minnesota Twins,Metropolitan Stadium,469090,107,108,MIN,MIN,MIN +1981,AL,ML4,MIL,E,1,109,49,62,47,Y,,N,N,493,3743,961,173,20,96,300,461,39,36,,,459,428,3.9100000000,11,4,35,2958,994,72,352,448,79,135,0.98,Milwaukee Brewers,County Stadium,874292,95,94,MIL,MIL,MIL +1981,AL,NYA,NYY,E,4,107,51,59,48,Y,,Y,N,421,3529,889,148,22,100,391,434,47,30,,,343,305,2.9000000000,16,13,30,2844,827,64,287,606,72,100,0.98,New York Yankees,Yankee Stadium II,1614353,98,97,NYY,NYA,NYA +1981,AL,OAK,OAK,W,1,109,56,64,45,Y,,N,N,458,3677,910,119,26,104,342,647,98,47,,,403,364,3.3000000000,60,13,10,2979,883,80,370,505,81,74,0.98,Oakland Athletics,Oakland Coliseum,1304052,95,95,OAK,OAK,OAK +1981,AL,SEA,SEA,W,6,110,57,44,65,N,,N,N,426,3780,950,148,13,89,329,553,100,50,,,521,469,4.2300000000,10,6,23,2992,1039,76,360,478,91,122,0.97,Seattle Mariners,Kingdome,636276,105,106,SEA,SEA,SEA +1981,AL,TEX,TEX,W,2,105,56,57,48,N,,N,N,452,3581,968,178,15,49,295,396,46,41,,,389,355,3.4000000000,23,8,18,2820,891,67,322,488,69,102,0.98,Texas Rangers,Arlington Stadium,850076,94,94,TEX,TEX,TEX +1981,AL,TOR,TOR,E,7,106,53,37,69,N,,N,N,329,3521,797,137,23,61,284,556,66,57,,,466,404,3.8200000000,20,4,18,2859,908,72,377,451,105,102,0.97,Toronto Blue Jays,Exhibition Stadium,755083,106,108,TOR,TOR,TOR +1981,NL,ATL,ATL,W,5,107,50,50,56,N,,N,N,395,3642,886,148,22,64,321,540,98,39,,,416,371,3.4500000000,11,6,24,2904,936,62,330,471,102,93,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,535418,102,103,ATL,ATL,ATL +1981,NL,CHN,CHC,E,6,106,58,38,65,N,,N,N,370,3546,838,138,29,57,342,611,72,41,,,483,426,4.0100000000,6,2,20,2868,983,59,388,532,113,103,0.97,Chicago Cubs,Wrigley Field,565637,104,106,CHC,CHN,CHN +1981,NL,CIN,CIN,W,1,108,54,66,42,N,,N,N,464,3637,972,190,24,64,375,553,58,37,,,440,400,3.7300000000,25,19,20,2897,863,67,393,593,80,99,0.98,Cincinnati Reds,Riverfront Stadium,1093730,102,102,CIN,CIN,CIN +1981,NL,HOU,HOU,W,3,110,51,61,49,Y,,N,N,394,3693,948,160,35,45,340,488,81,43,,,331,293,2.6600000000,23,9,25,2970,842,40,300,610,87,81,0.98,Houston Astros,Astrodome,1321282,95,94,HOU,HOU,HOU +1981,NL,LAN,LAD,W,2,110,56,63,47,Y,,Y,Y,450,3751,984,133,20,82,331,550,73,46,,,356,333,3.0100000000,26,19,24,2991,904,54,302,603,87,101,0.98,Los Angeles Dodgers,Dodger Stadium,2381292,97,96,LAD,LAN,LAN +1981,NL,MON,WSN,E,2,108,56,60,48,Y,,N,N,443,3591,883,146,28,81,368,498,138,40,,,394,357,3.3000000000,20,12,23,2925,902,58,268,520,81,88,0.98,Montreal Expos,Stade Olympique,1534564,101,100,MON,MON,MON +1981,NL,NYN,NYM,E,5,105,52,41,62,N,,N,N,348,3493,868,136,35,57,304,603,103,42,,,432,365,3.5500000000,7,3,24,2778,906,74,336,490,130,89,0.96,New York Mets,Shea Stadium,704244,98,99,NYM,NYN,NYN +1981,NL,PHI,PHI,E,3,107,55,59,48,Y,,N,N,491,3665,1002,165,25,69,372,432,103,46,,,472,432,4.0500000000,19,5,23,2880,967,72,347,580,86,90,0.98,Philadelphia Phillies,Veterans Stadium,1638752,104,104,PHI,PHI,PHI +1981,NL,PIT,PIT,E,4,103,51,46,56,N,,N,N,407,3576,920,176,30,55,278,494,122,52,,,425,373,3.5600000000,11,5,29,2826,953,60,346,492,86,106,0.97,Pittsburgh Pirates,Three Rivers Stadium,541789,104,104,PIT,PIT,PIT +1981,NL,SDN,SDP,W,6,110,55,41,69,N,,N,N,382,3757,963,170,35,32,311,525,83,62,,,455,414,3.7200000000,9,6,23,3006,1013,64,414,492,102,117,0.97,San Diego Padres,Jack Murphy Stadium,519161,93,94,SDP,SDN,SDN +1981,NL,SFN,SFG,W,4,111,53,56,55,N,,N,N,427,3766,941,161,26,63,386,543,89,50,,,414,368,3.2800000000,8,4,33,3028,970,57,393,561,99,102,0.97,San Francisco Giants,Candlestick Park,632274,98,98,SFG,SFN,SFN +1981,NL,SLN,STL,E,1,103,53,59,43,N,,N,N,464,3537,936,158,45,50,379,495,88,45,,,417,380,3.6300000000,11,5,33,2829,902,52,290,388,82,108,0.98,St. Louis Cardinals,Busch Stadium II,1010247,103,102,STL,SLN,SLN +1982,AL,BAL,BAL,E,2,163,82,94,68,N,,N,N,774,5557,1478,259,27,179,634,796,49,38,,,687,648,3.9900000000,38,8,34,4386,1436,147,488,719,101,140,0.98,Baltimore Orioles,Memorial Stadium,1613031,100,99,BAL,BAL,BAL +1982,AL,BOS,BOS,E,3,162,81,89,73,N,,N,N,753,5596,1536,271,31,136,547,736,42,39,,,713,651,4.0300000000,23,11,33,4359,1557,155,478,816,121,172,0.98,Boston Red Sox,Fenway Park II,1950124,107,106,BOS,BOS,BOS +1982,AL,CAL,ANA,W,1,162,81,93,69,Y,,N,N,814,5532,1518,268,26,186,613,760,55,53,,,670,621,3.8200000000,40,10,27,4392,1436,124,482,728,106,171,0.98,California Angels,Anaheim Stadium,2807360,100,99,CAL,CAL,CAL +1982,AL,CHA,CHW,W,3,162,80,87,75,N,,N,N,786,5575,1523,266,52,136,533,866,136,58,,,710,619,3.8700000000,30,10,41,4317,1502,99,460,753,154,173,0.97,Chicago White Sox,Comiskey Park,1567787,100,99,CHW,CHA,CHA +1982,AL,CLE,CLE,E,6,162,81,78,84,N,,N,N,683,5559,1458,225,32,109,651,625,151,68,,,748,670,4.1100000000,31,9,30,4404,1433,122,589,882,123,129,0.98,Cleveland Indians,Cleveland Stadium,1044021,101,101,CLE,CLE,CLE +1982,AL,DET,DET,E,4,162,81,83,79,N,,N,N,729,5590,1489,237,40,177,470,807,93,66,,,685,613,3.8000000000,45,5,27,4353,1371,172,554,740,115,165,0.98,Detroit Tigers,Tiger Stadium,1636058,100,99,DET,DET,DET +1982,AL,KCA,KCR,W,2,162,81,90,72,N,,N,N,784,5629,1603,295,58,132,442,758,133,48,,,717,649,4.0800000000,16,12,45,4293,1443,163,471,650,127,140,0.97,Kansas City Royals,Royals Stadium,2284464,100,100,KCR,KCA,KCA +1982,AL,MIN,MIN,W,7,162,81,60,102,N,,N,N,657,5544,1427,234,44,148,474,887,38,33,,,819,752,4.7200000000,26,7,30,4299,1484,208,643,812,105,162,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,921186,103,104,MIN,MIN,MIN +1982,AL,ML4,MIL,E,1,163,82,95,67,Y,,Y,N,891,5733,1599,277,41,216,484,714,84,52,,,717,649,3.9800000000,34,6,47,4401,1514,152,511,717,125,185,0.98,Milwaukee Brewers,County Stadium,1978896,94,93,MIL,MIL,MIL +1982,AL,NYA,NYY,E,5,162,81,79,83,N,,N,N,709,5526,1417,225,37,161,590,719,69,45,,,716,647,3.9900000000,24,8,39,4377,1471,113,491,939,128,158,0.97,New York Yankees,Yankee Stadium II,2041219,98,97,NYY,NYA,NYA +1982,AL,OAK,OAK,W,5,162,81,68,94,N,,N,N,691,5448,1286,211,27,149,582,948,232,87,,,819,734,4.5400000000,42,6,22,4368,1506,177,648,697,160,140,0.97,Oakland Athletics,Oakland Coliseum,1735489,94,95,OAK,OAK,OAK +1982,AL,SEA,SEA,W,4,162,81,76,86,N,,N,N,651,5626,1431,259,33,130,456,806,131,82,,,712,636,3.8800000000,23,11,39,4428,1431,173,547,1002,138,158,0.97,Seattle Mariners,Kingdome,1070404,103,105,SEA,SEA,SEA +1982,AL,TEX,TEX,W,6,162,81,64,98,N,,N,N,590,5445,1354,204,26,115,447,750,63,45,,,749,681,4.2800000000,32,5,24,4293,1554,128,483,690,121,169,0.98,Texas Rangers,Arlington Stadium,1154432,95,95,TEX,TEX,TEX +1982,AL,TOR,TOR,E,6,162,81,78,84,N,,N,N,651,5526,1447,262,45,106,415,749,118,81,,,701,633,3.9500000000,41,13,25,4329,1428,147,493,776,136,146,0.97,Toronto Blue Jays,Exhibition Stadium,1275978,110,110,TOR,TOR,TOR +1982,NL,ATL,ATL,W,1,162,81,89,73,Y,,N,N,739,5507,1411,215,22,146,554,869,151,77,,,702,621,3.8200000000,15,11,51,4389,1484,126,502,813,137,186,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1801985,104,104,ATL,ATL,ATL +1982,NL,CHN,CHC,E,5,162,81,73,89,N,,N,N,676,5531,1436,239,46,102,460,869,132,70,,,709,630,3.9200000000,9,7,43,4341,1510,125,452,764,132,110,0.97,Chicago Cubs,Wrigley Field,1249278,102,103,CHC,CHN,CHN +1982,NL,CIN,CIN,W,6,162,81,61,101,N,,N,N,545,5479,1375,228,34,82,470,817,131,69,,,661,594,3.6600000000,22,7,31,4380,1414,105,570,998,128,158,0.98,Cincinnati Reds,Riverfront Stadium,1326528,102,102,CIN,CIN,CIN +1982,NL,HOU,HOU,W,5,162,81,77,85,N,,N,N,569,5440,1342,236,48,74,435,830,140,61,,,620,549,3.4200000000,37,16,31,4338,1338,87,479,899,136,154,0.97,Houston Astros,Astrodome,1558555,92,92,HOU,HOU,HOU +1982,NL,LAN,LAD,W,2,162,81,88,74,N,,N,N,691,5642,1487,222,32,138,528,804,151,56,,,612,539,3.2600000000,37,16,28,4464,1356,81,468,932,139,131,0.97,Los Angeles Dodgers,Dodger Stadium,3608881,98,97,LAD,LAN,LAN +1982,NL,MON,WSN,E,3,162,81,86,76,N,,N,N,697,5557,1454,270,38,133,503,816,156,56,,,616,537,3.3100000000,34,10,43,4380,1371,110,448,936,122,117,0.98,Montreal Expos,Stade Olympique,2318292,102,101,MON,MON,MON +1982,NL,NYN,NYM,E,6,162,81,65,97,N,,N,N,609,5510,1361,227,26,97,456,1005,137,58,,,723,624,3.8800000000,15,5,37,4341,1508,119,582,759,175,134,0.97,New York Mets,Shea Stadium,1323036,99,101,NYM,NYN,NYN +1982,NL,PHI,PHI,E,2,162,81,89,73,N,,N,N,664,5454,1417,245,25,112,506,831,128,76,,,654,584,3.6100000000,38,13,33,4368,1395,86,472,1002,121,138,0.98,Philadelphia Phillies,Veterans Stadium,2376394,103,102,PHI,PHI,PHI +1982,NL,PIT,PIT,E,4,162,81,84,78,N,,N,N,724,5614,1535,272,40,134,447,862,161,75,,,696,621,3.8100000000,19,7,39,4398,1434,118,521,933,145,133,0.97,Pittsburgh Pirates,Three Rivers Stadium,1024106,104,104,PIT,PIT,PIT +1982,NL,SDN,SDP,W,4,162,81,81,81,N,,N,N,675,5575,1435,217,52,81,429,877,165,77,,,658,577,3.5200000000,20,11,41,4428,1348,139,502,765,152,142,0.97,San Diego Padres,Jack Murphy Stadium,1607516,96,96,SDP,SDN,SDN +1982,NL,SFN,SFG,W,3,162,81,87,75,N,,N,N,673,5499,1393,213,30,133,607,915,130,56,,,687,593,3.6400000000,18,4,45,4395,1507,109,466,810,173,125,0.97,San Francisco Giants,Candlestick Park,1200948,99,99,SFG,SFN,SFN +1982,NL,SLN,STL,E,1,162,81,92,70,Y,,Y,Y,685,5455,1439,239,52,67,569,805,200,91,,,609,549,3.3700000000,25,10,47,4395,1420,94,502,689,124,169,0.98,St. Louis Cardinals,Busch Stadium II,2111906,101,101,STL,SLN,SLN +1983,AL,BAL,BAL,E,1,162,81,98,64,Y,,Y,Y,799,5546,1492,283,27,168,601,800,61,33,,,652,586,3.6300000000,36,15,38,4356,1451,130,452,774,121,159,0.98,Baltimore Orioles,Memorial Stadium,2042071,98,98,BAL,BAL,BAL +1983,AL,BOS,BOS,E,6,162,81,78,84,N,,N,N,724,5590,1512,287,32,142,536,758,30,26,,,775,697,4.3400000000,29,7,42,4338,1572,158,493,767,130,168,0.97,Boston Red Sox,Fenway Park II,1782285,107,107,BOS,BOS,BOS +1983,AL,CAL,ANA,W,5,162,81,70,92,N,,N,N,722,5640,1467,241,22,154,509,835,41,39,,,779,706,4.3100000000,39,7,23,4422,1636,130,496,668,154,190,0.97,California Angels,Anaheim Stadium,2555016,99,99,CAL,CAL,CAL +1983,AL,CHA,CHW,W,1,162,81,99,63,Y,,N,N,800,5484,1439,270,42,157,527,888,165,50,,,650,589,3.6700000000,35,12,48,4335,1355,128,447,877,120,158,0.98,Chicago White Sox,Comiskey Park,2132821,104,103,CHW,CHA,CHA +1983,AL,CLE,CLE,E,7,162,81,70,92,N,,N,N,704,5476,1451,249,31,86,605,691,109,71,,,785,709,4.4300000000,34,8,25,4323,1531,120,529,794,122,174,0.98,Cleveland Indians,Cleveland Stadium,768941,104,105,CLE,CLE,CLE +1983,AL,DET,DET,E,2,162,81,92,70,N,,N,N,789,5592,1530,283,53,156,508,831,93,53,,,679,613,3.8000000000,42,9,28,4353,1318,170,522,875,124,142,0.98,Detroit Tigers,Tiger Stadium,1829636,97,96,DET,DET,DET +1983,AL,KCA,KCR,W,2,163,82,79,83,N,,N,N,696,5598,1515,273,54,109,397,722,182,47,,,767,679,4.2500000000,19,8,49,4311,1535,133,471,593,164,178,0.97,Kansas City Royals,Royals Stadium,1963875,100,100,KCR,KCA,KCA +1983,AL,MIN,MIN,W,5,162,81,70,92,N,,N,N,709,5601,1463,280,41,141,467,802,44,29,,,822,744,4.6600000000,20,5,39,4311,1559,163,580,748,118,170,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,858939,104,105,MIN,MIN,MIN +1983,AL,ML4,MIL,E,5,162,81,87,75,N,,N,N,764,5620,1556,281,57,132,475,665,101,49,,,708,649,4.0200000000,35,10,43,4362,1513,133,491,689,113,162,0.98,Milwaukee Brewers,County Stadium,2397131,93,92,MIL,MIL,MIL +1983,AL,NYA,NYY,E,3,162,81,91,71,N,,N,N,770,5631,1535,269,40,153,533,686,84,42,,,703,624,3.8600000000,47,12,32,4368,1449,116,455,892,139,157,0.97,New York Yankees,Yankee Stadium II,2257976,96,95,NYY,NYA,NYA +1983,AL,OAK,OAK,W,4,162,81,74,88,N,,N,N,708,5516,1447,237,28,121,524,872,235,98,,,782,701,4.3400000000,22,12,33,4362,1462,135,626,719,157,157,0.97,Oakland Athletics,Oakland Coliseum,1294941,93,94,OAK,OAK,OAK +1983,AL,SEA,SEA,W,7,162,81,60,102,N,,N,N,558,5336,1280,247,31,111,460,840,144,80,,,740,649,4.1200000000,25,9,39,4254,1455,145,544,910,134,159,0.97,Seattle Mariners,Kingdome,813537,104,105,SEA,SEA,SEA +1983,AL,TEX,TEX,W,3,163,81,77,85,N,,N,N,639,5610,1429,242,33,106,442,767,119,60,,,609,539,3.3100000000,43,11,32,4398,1392,97,471,826,113,151,0.98,Texas Rangers,Arlington Stadium,1363469,97,98,TEX,TEX,TEX +1983,AL,TOR,TOR,E,4,162,81,89,73,N,,N,N,795,5581,1546,268,58,167,510,810,131,72,,,726,661,4.1200000000,43,8,32,4335,1434,145,517,835,115,148,0.98,Toronto Blue Jays,Exhibition Stadium,1930415,106,106,TOR,TOR,TOR +1983,NL,ATL,ATL,W,2,162,80,88,74,N,,N,N,746,5472,1489,218,45,130,582,847,146,88,,,640,587,3.6700000000,18,4,48,4320,1412,132,540,895,137,176,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,2119935,108,107,ATL,ATL,ATL +1983,NL,CHN,CHC,E,5,162,81,71,91,N,,N,N,701,5512,1436,272,42,140,470,868,84,40,,,719,647,4.0800000000,9,10,42,4284,1496,117,498,807,115,164,0.98,Chicago Cubs,Wrigley Field,1479717,104,104,CHC,CHN,CHN +1983,NL,CIN,CIN,W,6,162,81,74,88,N,,N,N,623,5333,1274,236,35,107,588,1006,154,77,,,710,637,3.9800000000,34,5,29,4323,1365,135,627,934,114,121,0.98,Cincinnati Reds,Riverfront Stadium,1190419,103,104,CIN,CIN,CIN +1983,NL,HOU,HOU,W,3,162,82,85,77,N,,N,N,643,5502,1412,239,60,97,517,869,164,95,,,646,562,3.4500000000,22,14,48,4398,1276,94,570,904,147,165,0.97,Houston Astros,Astrodome,1351962,93,93,HOU,HOU,HOU +1983,NL,LAN,LAD,W,1,163,80,91,71,Y,,N,N,654,5440,1358,197,34,146,541,925,166,76,,,609,504,3.1000000000,27,12,40,4392,1336,97,495,1000,168,132,0.97,Los Angeles Dodgers,Dodger Stadium,3510313,99,99,LAD,LAN,LAN +1983,NL,MON,WSN,E,3,163,81,82,80,N,,N,N,677,5611,1482,297,41,102,509,733,138,44,,,646,585,3.5800000000,38,15,34,4413,1406,120,479,899,116,130,0.98,Montreal Expos,Stade Olympique,2320651,99,99,MON,MON,MON +1983,NL,NYN,NYM,E,6,162,82,68,94,N,,N,N,575,5444,1314,172,26,112,436,1031,141,64,,,680,593,3.6800000000,18,7,33,4353,1384,97,615,717,151,171,0.97,New York Mets,Shea Stadium,1112774,99,100,NYM,NYN,NYN +1983,NL,PHI,PHI,E,1,163,82,90,72,Y,,Y,N,696,5426,1352,209,45,125,640,906,143,75,,,635,542,3.3400000000,20,10,41,4383,1429,111,464,1092,152,117,0.97,Philadelphia Phillies,Veterans Stadium,2128339,99,99,PHI,PHI,PHI +1983,NL,PIT,PIT,E,2,162,81,84,78,N,,N,N,659,5531,1460,238,29,121,497,873,124,77,,,648,577,3.5500000000,25,14,41,4386,1378,109,563,1061,115,165,0.98,Pittsburgh Pirates,Three Rivers Stadium,1225916,103,102,PIT,PIT,PIT +1983,NL,SDN,SDP,W,4,163,82,81,81,N,,N,N,653,5527,1384,207,34,93,482,822,179,67,,,653,590,3.6200000000,23,5,44,4401,1389,144,528,850,129,135,0.97,San Diego Padres,Jack Murphy Stadium,1539815,97,97,SDP,SDN,SDN +1983,NL,SFN,SFG,W,5,162,81,79,83,N,,N,N,687,5369,1324,206,30,142,619,990,140,78,,,697,594,3.7000000000,20,9,47,4335,1431,127,520,881,171,109,0.97,San Francisco Giants,Candlestick Park,1251530,97,98,SFG,SFN,SFN +1983,NL,SLN,STL,E,4,162,81,79,83,N,,N,N,679,5550,1496,262,63,83,543,879,207,89,,,710,615,3.7900000000,22,10,27,4380,1479,115,525,709,152,173,0.97,St. Louis Cardinals,Busch Stadium II,2317914,101,100,STL,SLN,SLN +1984,AL,BAL,BAL,E,5,162,81,85,77,N,,N,N,681,5456,1374,234,23,160,620,884,51,36,,,667,593,3.7100000000,48,13,32,4317,1393,137,512,714,123,166,0.98,Baltimore Orioles,Memorial Stadium,2045784,98,97,BAL,BAL,BAL +1984,AL,BOS,BOS,E,4,162,81,86,76,N,,N,N,810,5648,1598,259,45,181,500,842,38,25,,,764,670,4.1800000000,40,12,32,4326,1524,141,517,927,143,128,0.97,Boston Red Sox,Fenway Park II,1661618,105,105,BOS,BOS,BOS +1984,AL,CAL,ANA,W,2,162,81,81,81,N,,N,N,696,5470,1363,211,30,150,556,928,80,51,,,697,642,3.9600000000,36,12,26,4374,1526,143,474,754,128,170,0.98,California Angels,Anaheim Stadium,2402997,100,100,CAL,CAL,CAL +1984,AL,CHA,CHW,W,5,162,81,74,88,N,,N,N,679,5513,1360,225,38,172,523,883,109,49,,,736,667,4.1300000000,43,9,32,4362,1416,155,483,840,122,160,0.98,Chicago White Sox,Comiskey Park,2136988,105,104,CHW,CHA,CHA +1984,AL,CLE,CLE,E,6,163,81,75,87,N,,N,N,761,5643,1498,222,39,123,600,815,126,77,,,766,694,4.2600000000,21,7,35,4401,1523,141,545,803,146,163,0.97,Cleveland Indians,Cleveland Stadium,734079,102,103,CLE,CLE,CLE +1984,AL,DET,DET,E,1,162,82,104,58,Y,,Y,Y,829,5644,1529,254,46,187,602,941,106,68,,,643,568,3.4900000000,19,8,51,4392,1358,130,489,914,124,162,0.98,Detroit Tigers,Tiger Stadium,2704794,100,98,DET,DET,DET +1984,AL,KCA,KCR,W,1,162,81,84,78,Y,,N,N,673,5543,1487,269,52,117,400,832,106,64,,,686,629,3.9200000000,18,9,50,4332,1426,136,433,724,129,157,0.98,Kansas City Royals,Royals Stadium,1810018,100,101,KCR,KCA,KCA +1984,AL,MIN,MIN,W,2,162,81,81,81,N,,N,N,673,5562,1473,259,33,114,437,735,39,30,,,675,615,3.8500000000,32,9,38,4311,1429,159,463,713,120,134,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1598692,104,105,MIN,MIN,MIN +1984,AL,ML4,MIL,E,7,161,81,67,94,N,,N,N,641,5511,1446,232,36,96,432,673,52,57,,,734,646,4.0600000000,13,7,41,4299,1532,137,480,785,136,156,0.97,Milwaukee Brewers,County Stadium,1608509,96,97,MIL,MIL,MIL +1984,AL,NYA,NYY,E,3,162,81,87,75,N,,N,N,758,5661,1560,275,32,130,534,673,62,38,,,679,615,3.7800000000,15,12,43,4395,1485,120,518,992,142,177,0.97,New York Yankees,Yankee Stadium II,1821815,96,95,NYY,NYA,NYA +1984,AL,OAK,OAK,W,4,162,81,77,85,N,,N,N,738,5457,1415,257,29,158,568,871,145,64,,,796,712,4.4800000000,15,6,44,4290,1554,155,592,695,146,159,0.97,Oakland Athletics,Oakland Coliseum,1353281,93,93,OAK,OAK,OAK +1984,AL,SEA,SEA,W,5,162,81,74,88,N,,N,N,682,5546,1429,244,34,129,519,871,116,62,,,774,691,4.3100000000,26,4,35,4326,1497,138,619,972,126,143,0.97,Seattle Mariners,Kingdome,870372,98,100,SEA,SEA,SEA +1984,AL,TEX,TEX,W,7,161,80,69,92,N,,N,N,656,5569,1452,227,29,120,420,807,81,50,,,714,625,3.9100000000,38,6,21,4314,1443,148,518,863,138,138,0.97,Texas Rangers,Arlington Stadium,1102471,103,104,TEX,TEX,TEX +1984,AL,TOR,TOR,E,2,163,81,89,73,N,,N,N,750,5687,1555,275,68,143,460,816,193,67,,,696,628,3.8600000000,34,10,33,4392,1433,140,528,875,123,166,0.98,Toronto Blue Jays,Exhibition Stadium,2110009,104,103,TOR,TOR,TOR +1984,NL,ATL,ATL,W,2,162,81,80,82,N,,N,N,632,5422,1338,234,27,111,555,896,140,85,,,655,574,3.5700000000,17,7,49,4341,1401,122,525,859,139,153,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1724892,107,107,ATL,ATL,ATL +1984,NL,CHN,CHC,E,1,161,80,96,65,Y,,N,N,762,5437,1415,240,47,136,567,967,154,66,,,658,598,3.7500000000,19,8,50,4302,1458,99,442,879,121,137,0.98,Chicago Cubs,Wrigley Field,2107655,108,108,CHC,CHN,CHN +1984,NL,CIN,CIN,W,5,162,81,70,92,N,,N,N,627,5498,1342,238,30,106,566,978,160,63,,,747,675,4.1600000000,25,6,25,4383,1445,128,578,946,139,116,0.97,Cincinnati Reds,Riverfront Stadium,1275887,104,105,CIN,CIN,CIN +1984,NL,HOU,HOU,W,2,162,81,80,82,N,,N,N,693,5548,1465,222,67,79,494,837,105,61,,,630,535,3.3200000000,24,13,29,4347,1350,91,502,950,133,160,0.97,Houston Astros,Astrodome,1229862,92,92,HOU,HOU,HOU +1984,NL,LAN,LAD,W,4,162,81,79,83,N,,N,N,580,5399,1316,213,23,102,488,829,109,69,,,600,514,3.1700000000,39,16,27,4380,1381,76,499,1033,163,146,0.97,Los Angeles Dodgers,Dodger Stadium,3134824,98,98,LAD,LAN,LAN +1984,NL,MON,WSN,E,5,161,81,78,83,N,,N,N,593,5439,1367,242,36,96,470,782,131,38,,,585,526,3.3100000000,19,10,48,4293,1333,114,474,861,132,147,0.97,Montreal Expos,Stade Olympique,1606531,96,96,MON,MON,MON +1984,NL,NYN,NYM,E,2,162,81,90,72,N,,N,N,652,5438,1400,235,25,107,500,1001,149,54,,,676,577,3.6000000000,12,15,50,4326,1371,104,573,1028,129,154,0.97,New York Mets,Shea Stadium,1842695,99,99,NYM,NYN,NYN +1984,NL,PHI,PHI,E,4,162,81,81,81,N,,N,N,720,5614,1494,248,51,147,555,1084,186,60,,,690,586,3.6200000000,11,6,35,4374,1416,101,448,904,161,112,0.97,Philadelphia Phillies,Veterans Stadium,2062693,102,101,PHI,PHI,PHI +1984,NL,PIT,PIT,E,6,162,81,75,87,N,,N,N,615,5537,1412,237,33,98,438,841,96,62,,,567,508,3.1100000000,27,13,34,4410,1344,102,502,995,128,142,0.98,Pittsburgh Pirates,Three Rivers Stadium,773500,101,101,PIT,PIT,PIT +1984,NL,SDN,SDP,W,1,162,81,92,70,Y,,Y,N,686,5504,1425,207,42,109,472,810,152,68,,,634,565,3.4800000000,13,17,44,4380,1327,122,563,812,138,144,0.97,San Diego Padres,Jack Murphy Stadium,1983904,100,100,SDP,SDN,SDN +1984,NL,SFN,SFG,W,6,162,81,66,96,N,,N,N,682,5650,1499,229,26,112,528,980,126,76,,,807,713,4.3900000000,9,7,38,4383,1589,125,549,854,169,134,0.97,San Francisco Giants,Candlestick Park,1001545,97,98,SFG,SFN,SFN +1984,NL,SLN,STL,E,3,162,81,84,78,N,,N,N,652,5433,1369,225,44,75,516,924,220,71,,,645,576,3.5800000000,19,12,51,4347,1427,94,494,808,118,184,0.98,St. Louis Cardinals,Busch Stadium II,2037448,98,98,STL,SLN,SLN +1985,AL,BAL,BAL,E,4,161,81,83,78,N,,N,N,818,5517,1451,234,22,214,604,908,69,43,,,764,694,4.3800000000,32,6,33,4281,1480,160,568,793,115,168,0.98,Baltimore Orioles,Memorial Stadium,2132387,97,97,BAL,BAL,BAL +1985,AL,BOS,BOS,E,5,163,81,81,81,N,,N,N,800,5720,1615,292,31,162,562,816,66,27,,,720,659,4.0600000000,35,8,29,4383,1487,130,540,913,145,161,0.97,Boston Red Sox,Fenway Park II,1786633,104,104,BOS,BOS,BOS +1985,AL,CAL,ANA,W,2,162,79,90,72,N,,N,N,732,5442,1364,215,31,153,648,902,106,51,,,703,633,3.9100000000,22,8,41,4371,1453,171,514,767,112,202,0.98,California Angels,Anaheim Stadium,2567427,100,100,CAL,CAL,CAL +1985,AL,CHA,CHW,W,3,163,81,85,77,N,,N,N,736,5470,1386,247,37,146,471,843,108,56,,,720,656,4.0700000000,20,8,39,4353,1411,161,569,1023,111,152,0.98,Chicago White Sox,Comiskey Park,1669888,104,104,CHW,CHA,CHA +1985,AL,CLE,CLE,E,7,162,81,60,102,N,,N,N,729,5527,1465,254,31,116,492,817,132,72,,,861,775,4.9100000000,24,7,28,4263,1556,170,547,702,141,161,0.97,Cleveland Indians,Cleveland Stadium,655181,99,100,CLE,CLE,CLE +1985,AL,DET,DET,E,3,161,81,84,77,N,,N,N,729,5575,1413,254,45,202,526,926,75,41,,,688,612,3.7800000000,31,11,40,4368,1313,141,556,943,141,152,0.97,Detroit Tigers,Tiger Stadium,2286609,100,98,DET,DET,DET +1985,AL,KCA,KCR,W,1,162,82,91,71,Y,,Y,Y,687,5500,1384,261,49,154,473,840,128,48,,,639,567,3.4900000000,27,11,41,4383,1433,103,463,846,127,160,0.98,Kansas City Royals,Royals Stadium,2162717,100,100,KCR,KCA,KCA +1985,AL,MIN,MIN,W,4,162,84,77,85,N,,N,N,705,5509,1453,282,41,141,502,779,68,44,,,782,710,4.4800000000,41,7,34,4278,1468,164,462,767,120,139,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1651814,105,105,MIN,MIN,MIN +1985,AL,ML4,MIL,E,6,161,80,71,90,N,,N,N,690,5568,1467,250,44,101,462,746,69,34,,,802,701,4.3900000000,34,5,37,4311,1510,175,499,777,142,153,0.97,Milwaukee Brewers,County Stadium,1360265,100,101,MIL,MIL,MIL +1985,AL,NYA,NYY,E,2,161,80,97,64,N,,N,N,839,5458,1458,272,31,176,620,771,155,53,,,660,590,3.6900000000,25,9,49,4320,1373,157,518,907,123,172,0.97,New York Yankees,Yankee Stadium II,2214587,98,97,NYY,NYA,NYA +1985,AL,OAK,OAK,W,4,162,79,77,85,N,,N,N,757,5581,1475,230,34,155,508,861,117,58,,,787,712,4.4100000000,10,6,41,4359,1451,172,607,785,140,137,0.97,Oakland Athletics,Oakland Coliseum,1334599,92,92,OAK,OAK,OAK +1985,AL,SEA,SEA,W,6,162,83,74,88,N,,N,N,719,5521,1410,277,38,171,564,942,94,35,,,818,745,4.6800000000,23,8,30,4296,1456,154,637,868,122,156,0.98,Seattle Mariners,Kingdome,1128696,100,101,SEA,SEA,SEA +1985,AL,TEX,TEX,W,7,161,80,62,99,N,,N,N,617,5361,1359,213,41,129,530,819,130,76,,,785,715,4.5600000000,18,5,33,4233,1479,173,501,863,119,145,0.98,Texas Rangers,Arlington Stadium,1112497,101,102,TEX,TEX,TEX +1985,AL,TOR,TOR,E,1,161,80,99,62,Y,,N,N,759,5508,1482,281,53,158,503,807,144,77,,,588,533,3.3100000000,18,9,47,4344,1312,147,484,823,125,164,0.98,Toronto Blue Jays,Exhibition Stadium,2468925,104,103,TOR,TOR,TOR +1985,NL,ATL,ATL,W,5,162,81,66,96,N,,N,N,632,5526,1359,213,28,126,553,849,72,52,,,781,678,4.1900000000,9,9,29,4371,1512,134,642,776,159,197,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1350137,105,106,ATL,ATL,ATL +1985,NL,CHN,CHC,E,4,162,81,77,84,N,,N,N,686,5492,1397,239,28,150,562,937,182,49,,,729,667,4.1600000000,20,8,42,4326,1492,156,519,820,134,150,0.97,Chicago Cubs,Wrigley Field,2161534,110,110,CHC,CHN,CHN +1985,NL,CIN,CIN,W,2,162,81,89,72,N,,N,N,677,5431,1385,249,34,114,576,856,159,70,,,666,598,3.7100000000,24,11,45,4353,1347,131,535,910,121,142,0.98,Cincinnati Reds,Riverfront Stadium,1834619,104,105,CIN,CIN,CIN +1985,NL,HOU,HOU,W,3,162,81,83,79,N,,N,N,706,5582,1457,261,42,121,477,873,96,56,,,691,593,3.6600000000,17,9,42,4374,1393,119,543,909,152,159,0.97,Houston Astros,Astrodome,1184314,97,96,HOU,HOU,HOU +1985,NL,LAN,LAD,W,1,162,81,95,67,Y,,N,N,682,5502,1434,226,28,129,539,846,136,58,,,579,482,2.9600000000,37,21,36,4395,1280,102,462,979,166,131,0.97,Los Angeles Dodgers,Dodger Stadium,3264593,97,96,LAD,LAN,LAN +1985,NL,MON,WSN,E,3,161,81,84,77,N,,N,N,633,5429,1342,242,49,118,492,880,169,77,,,636,575,3.5500000000,13,13,53,4371,1346,99,509,870,121,152,0.98,Montreal Expos,Stade Olympique,1502494,95,95,MON,MON,MON +1985,NL,NYN,NYM,E,2,162,81,98,64,N,,N,N,695,5549,1425,239,35,134,546,872,117,53,,,568,514,3.1100000000,32,19,37,4464,1306,111,515,1039,115,138,0.98,New York Mets,Shea Stadium,2761601,99,97,NYM,NYN,NYN +1985,NL,PHI,PHI,E,5,162,81,75,87,N,,N,N,667,5477,1343,238,47,141,527,1095,122,51,,,673,592,3.6800000000,24,9,30,4341,1424,115,596,899,139,142,0.97,Philadelphia Phillies,Veterans Stadium,1830350,103,103,PHI,PHI,PHI +1985,NL,PIT,PIT,E,6,161,80,57,104,N,,N,N,568,5436,1340,251,28,80,514,842,110,60,,,708,637,3.9700000000,15,6,29,4335,1406,107,584,962,133,127,0.97,Pittsburgh Pirates,Three Rivers Stadium,735900,99,100,PIT,PIT,PIT +1985,NL,SDN,SDP,W,3,162,81,83,79,N,,N,N,650,5507,1405,241,28,109,513,809,60,39,,,622,548,3.4000000000,26,19,44,4353,1399,127,443,727,124,158,0.98,San Diego Padres,Jack Murphy Stadium,2210352,99,99,SDP,SDN,SDN +1985,NL,SFN,SFG,W,6,162,81,62,100,N,,N,N,556,5420,1263,217,31,115,488,962,99,55,,,674,581,3.6100000000,13,5,24,4344,1348,125,572,985,144,134,0.97,San Francisco Giants,Candlestick Park,818697,95,96,SFG,SFN,SFN +1985,NL,SLN,STL,E,1,162,81,101,61,Y,,Y,N,747,5467,1446,245,59,87,586,853,314,96,,,572,504,3.1000000000,37,20,44,4392,1343,98,453,798,108,166,0.98,St. Louis Cardinals,Busch Stadium II,2637563,100,99,STL,SLN,SLN +1986,AL,BAL,BAL,E,7,162,79,73,89,N,,N,N,708,5524,1425,223,13,169,563,862,64,34,,,760,686,4.3000000000,17,6,39,4308,1451,177,535,954,135,163,0.97,Baltimore Orioles,Memorial Stadium,1973176,98,99,BAL,BAL,BAL +1986,AL,BOS,BOS,E,1,161,81,95,66,Y,,Y,N,794,5498,1488,320,21,144,595,707,41,34,,,696,624,3.9300000000,36,6,41,4287,1469,167,474,1033,129,146,0.97,Boston Red Sox,Fenway Park II,2147641,101,100,BOS,BOS,BOS +1986,AL,CAL,ANA,W,1,162,82,92,70,Y,,N,N,786,5433,1387,236,36,167,671,860,109,42,,,684,621,3.8400000000,29,12,40,4368,1356,153,478,955,107,156,0.98,California Angels,Anaheim Stadium,2655872,99,99,CAL,CAL,CAL +1986,AL,CHA,CHW,W,5,162,81,72,90,N,,N,N,644,5406,1335,197,34,121,487,940,115,54,,,699,630,3.9300000000,18,8,38,4326,1361,143,561,895,117,142,0.98,Chicago White Sox,Comiskey Park,1424313,104,104,CHW,CHA,CHA +1986,AL,CLE,CLE,E,5,163,81,84,78,N,,N,N,831,5702,1620,270,45,157,456,944,141,54,,,841,736,4.5800000000,31,7,34,4341,1548,167,605,744,156,148,0.97,Cleveland Indians,Cleveland Stadium,1471805,98,99,CLE,CLE,CLE +1986,AL,DET,DET,E,3,162,81,87,75,N,,N,N,798,5512,1447,234,30,198,613,885,138,58,,,714,645,4.0200000000,33,12,38,4329,1374,183,571,880,108,163,0.98,Detroit Tigers,Tiger Stadium,1899437,100,99,DET,DET,DET +1986,AL,KCA,KCR,W,3,162,81,76,86,N,,N,N,654,5561,1403,264,45,137,474,919,97,46,,,673,611,3.8200000000,24,13,31,4320,1413,121,479,888,123,153,0.98,Kansas City Royals,Royals Stadium,2320794,102,101,KCR,KCA,KCA +1986,AL,MIN,MIN,W,6,162,81,71,91,N,,N,N,741,5531,1446,257,39,196,501,977,81,61,,,839,759,4.7700000000,39,6,24,4296,1579,200,503,937,118,168,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1255453,102,102,MIN,MIN,MIN +1986,AL,ML4,MIL,E,6,161,80,77,84,N,,N,N,667,5461,1393,255,38,127,530,986,100,50,,,734,638,4.0100000000,29,12,32,4293,1478,158,494,952,146,146,0.97,Milwaukee Brewers,County Stadium,1265041,103,104,MIL,MIL,MIL +1986,AL,NYA,NYY,E,2,162,80,90,72,N,,N,N,797,5570,1512,275,23,188,645,911,139,48,,,738,659,4.1100000000,13,8,58,4329,1461,175,492,878,127,153,0.97,New York Yankees,Yankee Stadium II,2268030,99,98,NYY,NYA,NYA +1986,AL,OAK,OAK,W,3,162,83,76,86,N,,N,N,731,5435,1370,213,25,163,553,983,139,61,,,760,686,4.3100000000,22,8,37,4299,1334,166,667,937,135,120,0.97,Oakland Athletics,Oakland Coliseum,1314646,92,92,OAK,OAK,OAK +1986,AL,SEA,SEA,W,7,162,82,67,95,N,,N,N,718,5498,1392,243,41,158,572,1148,93,76,,,835,743,4.6500000000,33,5,27,4317,1590,171,585,944,156,191,0.97,Seattle Mariners,Kingdome,1029045,100,101,SEA,SEA,SEA +1986,AL,TEX,TEX,W,2,162,81,87,75,N,,N,N,771,5529,1479,248,43,184,511,1088,103,85,,,743,662,4.1100000000,15,8,41,4350,1356,145,736,1059,120,160,0.98,Texas Rangers,Arlington Stadium,1692002,102,103,TEX,TEX,TEX +1986,AL,TOR,TOR,E,4,163,81,86,76,N,,N,N,809,5716,1540,285,35,181,496,848,110,59,,,733,669,4.0800000000,16,12,44,4428,1467,164,487,1002,100,150,0.98,Toronto Blue Jays,Exhibition Stadium,2455477,103,102,TOR,TOR,TOR +1986,NL,ATL,ATL,W,6,161,81,72,89,N,,N,N,615,5384,1348,241,24,138,538,904,93,76,,,719,628,3.9700000000,17,5,39,4272,1443,117,576,932,141,181,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,1387181,105,106,ATL,ATL,ATL +1986,NL,CHN,CHC,E,5,160,80,70,90,N,,N,N,680,5499,1409,258,27,155,508,966,132,62,,,781,721,4.4900000000,11,6,42,4335,1546,143,557,962,124,147,0.98,Chicago Cubs,Wrigley Field,1859102,107,108,CHC,CHN,CHN +1986,NL,CIN,CIN,W,2,162,81,86,76,N,,N,N,732,5536,1404,237,35,144,586,920,177,53,,,717,638,3.9100000000,14,8,45,4404,1465,136,524,924,140,160,0.97,Cincinnati Reds,Riverfront Stadium,1692432,104,104,CIN,CIN,CIN +1986,NL,HOU,HOU,W,1,162,81,96,66,Y,,N,N,654,5441,1388,244,32,125,536,916,163,75,,,569,510,3.1500000000,18,19,51,4368,1203,116,523,1160,130,108,0.97,Houston Astros,Astrodome,1734276,97,96,HOU,HOU,HOU +1986,NL,LAN,LAD,W,5,162,81,73,89,N,,N,N,638,5471,1373,232,14,130,478,966,155,67,,,679,607,3.7600000000,35,14,25,4362,1428,115,499,1051,179,118,0.97,Los Angeles Dodgers,Dodger Stadium,3023208,93,93,LAD,LAN,LAN +1986,NL,MON,WSN,E,4,161,80,78,83,N,,N,N,637,5508,1401,255,50,110,537,1016,193,95,,,688,616,3.7800000000,15,9,50,4398,1350,119,566,1051,133,132,0.97,Montreal Expos,Stade Olympique,1128981,100,100,MON,MON,MON +1986,NL,NYN,NYM,E,1,162,81,108,54,Y,,Y,Y,783,5558,1462,261,31,148,631,968,118,48,,,578,513,3.1100000000,27,11,46,4452,1304,103,509,1083,138,145,0.97,New York Mets,Shea Stadium,2767601,98,96,NYM,NYN,NYN +1986,NL,PHI,PHI,E,2,161,80,86,75,N,,N,N,739,5483,1386,266,39,154,589,1154,153,59,,,713,621,3.8500000000,22,11,39,4353,1473,130,553,874,137,157,0.97,Philadelphia Phillies,Veterans Stadium,1933335,104,104,PHI,PHI,PHI +1986,NL,PIT,PIT,E,6,162,81,64,98,N,,N,N,663,5456,1366,273,33,111,569,929,152,84,,,700,628,3.9000000000,17,9,30,4350,1397,138,570,924,142,134,0.97,Pittsburgh Pirates,Three Rivers Stadium,1000917,102,103,PIT,PIT,PIT +1986,NL,SDN,SDP,W,4,162,81,74,88,N,,N,N,656,5515,1442,239,25,136,484,917,96,68,,,723,640,3.9900000000,13,7,32,4329,1406,150,607,934,135,135,0.97,San Diego Padres,Jack Murphy Stadium,1805716,98,98,SDP,SDN,SDN +1986,NL,SFN,SFG,W,3,162,81,83,79,N,,N,N,698,5501,1394,269,29,114,536,1087,148,93,,,618,540,3.3300000000,18,10,35,4380,1264,121,591,992,143,149,0.97,San Francisco Giants,Candlestick Park,1528748,95,95,SFG,SFN,SFN +1986,NL,SLN,STL,E,3,161,81,79,82,N,,N,N,601,5378,1270,216,48,58,568,905,262,78,,,611,549,3.3700000000,17,4,46,4398,1364,135,485,761,123,178,0.98,St. Louis Cardinals,Busch Stadium II,2471974,100,99,STL,SLN,SLN +1987,AL,BAL,BAL,E,6,162,82,67,95,N,,N,N,729,5576,1437,219,20,211,524,939,69,45,,,880,801,5.0100000000,17,6,30,4317,1555,226,547,870,109,174,0.98,Baltimore Orioles,Memorial Stadium,1835692,97,98,BAL,BAL,BAL +1987,AL,BOS,BOS,E,5,162,80,78,84,N,,N,N,842,5586,1554,273,26,174,606,825,77,45,,,825,761,4.7700000000,47,13,16,4308,1584,190,517,1034,110,158,0.98,Boston Red Sox,Fenway Park II,2231551,103,102,BOS,BOS,BOS +1987,AL,CAL,ANA,W,6,162,81,75,87,N,,N,N,770,5570,1406,257,26,172,590,926,125,44,,,803,709,4.3800000000,20,7,36,4371,1481,212,504,941,117,162,0.98,California Angels,Anaheim Stadium,2696299,97,97,CAL,CAL,CAL +1987,AL,CHA,CHW,W,5,162,81,77,85,N,,N,N,748,5538,1427,283,36,173,487,971,138,52,,,746,691,4.3000000000,29,12,37,4341,1436,189,537,792,115,174,0.98,Chicago White Sox,Comiskey Park,1208060,103,103,CHW,CHA,CHA +1987,AL,CLE,CLE,E,7,162,81,61,101,N,,N,N,742,5606,1476,267,30,187,489,977,140,54,,,957,834,5.2800000000,24,8,25,4266,1566,219,606,849,152,128,0.97,Cleveland Indians,Cleveland Stadium,1077898,100,101,CLE,CLE,CLE +1987,AL,DET,DET,E,1,162,81,98,64,Y,,N,N,896,5649,1535,274,32,225,653,913,106,50,,,735,650,4.0200000000,33,10,31,4368,1430,180,563,976,122,147,0.98,Detroit Tigers,Tiger Stadium,2061830,96,95,DET,DET,DET +1987,AL,KCA,KCR,W,2,162,81,83,79,N,,N,N,715,5499,1443,239,40,168,523,1034,125,43,,,691,611,3.8600000000,44,11,26,4272,1424,128,548,923,131,151,0.97,Kansas City Royals,Royals Stadium,2392471,102,102,KCR,KCA,KCA +1987,AL,MIN,MIN,W,1,162,81,85,77,Y,,Y,Y,786,5441,1422,258,35,196,523,898,113,65,,,806,734,4.6300000000,16,4,39,4281,1465,210,564,990,98,147,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2081976,103,103,MIN,MIN,MIN +1987,AL,ML4,MIL,E,3,162,81,91,71,N,,N,N,862,5625,1552,272,46,163,598,1040,176,74,,,817,752,4.6200000000,28,6,45,4392,1548,169,529,1039,145,155,0.97,Milwaukee Brewers,County Stadium,1909244,103,103,MIL,MIL,MIL +1987,AL,NYA,NYY,E,4,162,81,89,73,N,,N,N,788,5511,1445,239,16,196,604,949,105,43,,,758,701,4.3600000000,19,10,47,4338,1475,179,542,900,102,155,0.98,New York Yankees,Yankee Stadium II,2427672,99,99,NYY,NYA,NYA +1987,AL,OAK,OAK,W,3,162,81,81,81,N,,N,N,806,5511,1432,263,33,199,593,1056,140,63,,,789,694,4.3200000000,18,6,40,4335,1442,176,531,1042,142,122,0.97,Oakland Athletics,Oakland Coliseum,1678921,93,93,OAK,OAK,OAK +1987,AL,SEA,SEA,W,4,162,81,78,84,N,,N,N,760,5508,1499,282,48,161,500,863,174,73,,,801,713,4.4900000000,39,10,33,4290,1503,199,497,919,121,150,0.98,Seattle Mariners,Kingdome,1134255,105,106,SEA,SEA,SEA +1987,AL,TEX,TEX,W,6,162,81,75,87,N,,N,N,823,5564,1478,264,35,194,567,1081,120,71,,,849,743,4.6300000000,20,3,27,4332,1388,199,760,1103,148,148,0.97,Texas Rangers,Arlington Stadium,1763053,100,101,TEX,TEX,TEX +1987,AL,TOR,TOR,E,2,162,81,96,66,N,,N,N,845,5635,1514,277,38,215,555,970,126,50,,,655,604,3.7400000000,18,8,43,4362,1323,158,567,1064,111,148,0.98,Toronto Blue Jays,Exhibition Stadium,2778429,102,101,TOR,TOR,TOR +1987,NL,ATL,ATL,W,5,161,81,69,92,N,,N,N,747,5428,1401,284,24,152,641,834,135,68,,,829,734,4.6300000000,16,4,32,4281,1529,163,587,837,116,170,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,1217402,104,106,ATL,ATL,ATL +1987,NL,CHN,CHC,E,6,161,80,76,85,N,,N,N,720,5583,1475,244,33,209,504,1064,109,48,,,801,725,4.5500000000,11,5,48,4302,1524,159,628,1024,130,154,0.97,Chicago Cubs,Wrigley Field,2035130,103,104,CHC,CHN,CHN +1987,NL,CIN,CIN,W,2,162,81,84,78,N,,N,N,783,5560,1478,262,29,192,514,928,169,46,,,752,684,4.2400000000,7,6,44,4356,1486,170,485,919,128,137,0.97,Cincinnati Reds,Riverfront Stadium,2185205,104,103,CIN,CIN,CIN +1987,NL,HOU,HOU,W,3,162,81,76,86,N,,N,N,648,5485,1386,238,28,122,526,936,162,46,,,678,615,3.8400000000,13,13,33,4323,1363,141,525,1137,115,113,0.98,Houston Astros,Astrodome,1909902,96,96,HOU,HOU,HOU +1987,NL,LAN,LAD,W,4,162,81,73,89,N,,N,N,635,5517,1389,236,23,125,445,923,128,59,,,675,601,3.7200000000,29,8,32,4365,1415,130,565,1097,155,144,0.97,Los Angeles Dodgers,Dodger Stadium,2797409,98,98,LAD,LAN,LAN +1987,NL,MON,WSN,E,3,162,81,91,71,N,,N,N,741,5527,1467,310,39,120,501,918,166,74,,,720,632,3.9200000000,16,8,50,4350,1428,145,446,1012,147,122,0.97,Montreal Expos,Stade Olympique,1850324,103,103,MON,MON,MON +1987,NL,NYN,NYM,E,2,162,81,92,70,N,,N,N,823,5601,1499,287,34,192,592,1012,159,49,,,698,620,3.8400000000,16,7,51,4362,1407,135,510,1032,137,137,0.97,New York Mets,Shea Stadium,3034129,95,93,NYM,NYN,NYN +1987,NL,PHI,PHI,E,4,162,81,80,82,N,,N,N,702,5475,1390,248,51,169,587,1109,111,49,,,749,673,4.1800000000,13,7,48,4344,1453,167,587,877,121,137,0.98,Philadelphia Phillies,Veterans Stadium,2100110,103,104,PHI,PHI,PHI +1987,NL,PIT,PIT,E,4,162,81,80,82,N,,N,N,723,5536,1464,282,45,131,535,914,140,58,,,744,674,4.2000000000,25,13,39,4335,1377,164,562,914,123,147,0.98,Pittsburgh Pirates,Three Rivers Stadium,1161193,100,100,PIT,PIT,PIT +1987,NL,SDN,SDP,W,6,162,81,65,97,N,,N,N,668,5456,1419,209,48,113,577,992,198,91,,,763,680,4.2700000000,14,10,33,4299,1402,175,602,897,146,135,0.97,San Diego Padres,Jack Murphy Stadium,1454061,96,97,SDP,SDN,SDN +1987,NL,SFN,SFG,W,1,162,81,90,72,Y,,N,N,783,5608,1458,274,32,205,511,1094,126,97,,,669,601,3.6800000000,19,10,38,4413,1407,146,547,1038,129,183,0.98,San Francisco Giants,Candlestick Park,1917168,96,95,SFG,SFN,SFN +1987,NL,SLN,STL,E,1,162,81,95,67,Y,,Y,N,798,5500,1449,252,49,94,644,933,248,72,,,693,637,3.9100000000,10,7,48,4398,1484,129,533,873,116,172,0.98,St. Louis Cardinals,Busch Stadium II,3072122,102,102,STL,SLN,SLN +1988,AL,BAL,BAL,E,7,161,80,54,107,N,,N,N,550,5358,1275,199,20,137,504,869,69,44,,,789,714,4.5400000000,20,7,26,4248,1506,153,523,709,118,172,0.98,Baltimore Orioles,Memorial Stadium,1660738,97,98,BAL,BAL,BAL +1988,AL,BOS,BOS,E,1,162,81,89,73,Y,,N,N,813,5545,1569,310,39,124,623,728,65,36,,,689,629,3.9700000000,26,14,37,4278,1415,143,493,1085,93,123,0.98,Boston Red Sox,Fenway Park II,2464851,105,104,BOS,BOS,BOS +1988,AL,CAL,ANA,W,4,162,81,75,87,N,,N,N,714,5582,1458,258,31,124,469,819,86,52,,,771,698,4.3200000000,26,9,33,4365,1503,135,568,817,135,175,0.97,California Angels,Anaheim Stadium,2340925,97,97,CAL,CAL,CAL +1988,AL,CHA,CHW,W,5,161,81,71,90,N,,N,N,631,5449,1327,224,35,132,446,908,98,46,,,757,659,4.1200000000,11,9,43,4317,1467,138,533,754,154,177,0.97,Chicago White Sox,Comiskey Park,1115749,100,100,CHW,CHA,CHA +1988,AL,CLE,CLE,E,6,162,81,78,84,N,,N,N,666,5505,1435,235,28,134,416,866,97,50,,,731,663,4.1600000000,35,10,46,4302,1501,120,442,812,124,131,0.98,Cleveland Indians,Cleveland Stadium,1411610,102,103,CLE,CLE,CLE +1988,AL,DET,DET,E,2,162,81,88,74,N,,N,N,703,5433,1358,213,28,143,588,841,87,42,,,658,596,3.7100000000,34,8,36,4335,1361,150,497,890,109,129,0.98,Detroit Tigers,Tiger Stadium,2081162,97,97,DET,DET,DET +1988,AL,KCA,KCR,W,3,161,80,84,77,N,,N,N,704,5469,1419,275,40,121,486,944,137,54,,,648,579,3.6500000000,29,12,32,4284,1415,102,465,886,124,147,0.98,Kansas City Royals,Royals Stadium,2350181,101,101,KCR,KCA,KCA +1988,AL,MIN,MIN,W,2,162,81,91,71,N,,N,N,759,5510,1508,294,31,151,528,832,107,63,,,672,625,3.9300000000,18,9,52,4293,1457,146,453,897,83,155,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,3030672,103,102,MIN,MIN,MIN +1988,AL,ML4,MIL,E,3,162,81,87,75,N,,N,N,682,5488,1409,258,26,113,439,911,159,55,,,616,555,3.4500000000,30,8,51,4347,1355,125,437,832,120,146,0.98,Milwaukee Brewers,County Stadium,1923238,101,100,MIL,MIL,MIL +1988,AL,NYA,NYY,E,5,161,80,85,76,N,,N,N,772,5592,1469,272,12,148,588,935,146,39,,,748,689,4.2600000000,16,5,43,4368,1512,157,487,861,134,161,0.97,New York Yankees,Yankee Stadium II,2633701,99,100,NYY,NYA,NYA +1988,AL,OAK,OAK,W,1,162,81,104,58,Y,,Y,N,800,5602,1474,251,22,156,580,926,129,54,,,620,569,3.4400000000,22,9,64,4467,1376,116,553,983,105,151,0.98,Oakland Athletics,Oakland Coliseum,2287335,97,96,OAK,OAK,OAK +1988,AL,SEA,SEA,W,7,161,81,68,93,N,,N,N,664,5436,1397,271,27,148,461,787,95,61,,,744,658,4.1500000000,28,11,28,4284,1385,144,558,981,123,168,0.98,Seattle Mariners,Kingdome,1022398,104,105,SEA,SEA,SEA +1988,AL,TEX,TEX,W,6,161,81,70,91,N,,N,N,637,5479,1378,227,39,112,542,1022,130,57,,,735,647,4.0500000000,41,11,31,4314,1310,129,654,912,129,145,0.97,Texas Rangers,Arlington Stadium,1581901,102,103,TEX,TEX,TEX +1988,AL,TOR,TOR,E,3,162,81,87,75,N,,N,N,763,5557,1491,271,47,158,521,935,107,36,,,680,612,3.8000000000,16,17,47,4347,1404,143,528,904,110,170,0.98,Toronto Blue Jays,Exhibition Stadium,2595175,100,99,TOR,TOR,TOR +1988,NL,ATL,ATL,W,6,160,79,54,106,N,,N,N,555,5440,1319,228,28,96,432,848,95,69,,,741,657,4.0900000000,14,4,25,4338,1481,108,524,810,151,138,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,848089,104,106,ATL,ATL,ATL +1988,NL,CHN,CHC,E,4,163,82,77,85,N,,N,N,660,5675,1481,262,46,113,403,910,120,46,,,694,625,3.8400000000,30,10,29,4392,1494,115,490,897,125,128,0.98,Chicago Cubs,Wrigley Field,2089034,105,105,CHC,CHN,CHN +1988,NL,CIN,CIN,W,2,161,80,87,74,N,,N,N,641,5426,1334,246,25,122,479,922,207,56,,,596,542,3.3500000000,24,13,43,4365,1271,121,504,934,121,131,0.98,Cincinnati Reds,Riverfront Stadium,2072528,104,104,CIN,CIN,CIN +1988,NL,HOU,HOU,W,5,162,81,82,80,N,,N,N,617,5494,1338,239,31,96,474,840,198,71,,,631,558,3.4100000000,21,15,40,4422,1339,123,478,1049,138,124,0.97,Houston Astros,Astrodome,1933505,96,96,HOU,HOU,HOU +1988,NL,LAN,LAD,W,1,162,81,94,67,Y,,Y,Y,628,5431,1346,217,25,99,437,947,131,46,,,544,481,2.9600000000,32,24,49,4389,1291,84,473,1029,142,126,0.97,Los Angeles Dodgers,Dodger Stadium,2980262,98,97,LAD,LAN,LAN +1988,NL,MON,WSN,E,3,163,81,81,81,N,,N,N,628,5573,1400,260,48,107,454,1053,189,89,,,592,507,3.0800000000,18,12,43,4446,1310,122,476,923,142,145,0.97,Montreal Expos,Stade Olympique,1478659,104,104,MON,MON,MON +1988,NL,NYN,NYM,E,1,160,80,100,60,Y,,N,N,703,5408,1387,251,24,152,544,842,140,51,,,532,465,2.9100000000,31,22,46,4317,1253,78,404,1100,115,127,0.98,New York Mets,Shea Stadium,3055445,95,94,NYM,NYN,NYN +1988,NL,PHI,PHI,E,6,162,81,65,96,N,,N,N,597,5403,1294,246,31,106,489,981,112,49,,,734,659,4.1400000000,16,6,36,4299,1447,118,628,859,145,139,0.97,Philadelphia Phillies,Veterans Stadium,1990041,101,103,PHI,PHI,PHI +1988,NL,PIT,PIT,E,2,160,81,85,75,N,,N,N,651,5379,1327,240,45,110,553,947,119,60,,,616,555,3.4700000000,12,11,46,4320,1349,108,469,790,124,128,0.98,Pittsburgh Pirates,Three Rivers Stadium,1866713,98,98,PIT,PIT,PIT +1988,NL,SDN,SDP,W,3,161,81,83,78,N,,N,N,594,5366,1325,205,35,94,494,892,123,50,,,583,528,3.2800000000,30,9,39,4347,1332,112,439,885,116,147,0.98,San Diego Padres,Jack Murphy Stadium,1506896,99,99,SDP,SDN,SDN +1988,NL,SFN,SFG,W,4,162,81,83,79,N,,N,N,670,5450,1353,227,44,113,550,1023,121,78,,,626,551,3.3900000000,25,13,42,4386,1323,99,422,875,129,145,0.98,San Francisco Giants,Candlestick Park,1785297,96,95,SFG,SFN,SFN +1988,NL,SLN,STL,E,5,162,81,76,86,N,,N,N,578,5518,1373,207,33,71,484,827,234,64,,,633,567,3.4700000000,17,14,42,4410,1387,91,486,881,121,131,0.98,St. Louis Cardinals,Busch Stadium II,2892799,101,101,STL,SLN,SLN +1989,AL,BAL,BAL,E,2,162,81,87,75,N,,N,N,708,5440,1369,238,33,129,593,957,118,55,,,686,644,4.0000000000,16,7,44,4344,1518,134,486,676,87,163,0.98,Baltimore Orioles,Memorial Stadium,2535208,96,97,BAL,BAL,BAL +1989,AL,BOS,BOS,E,3,162,81,83,79,N,,N,N,774,5666,1571,326,30,108,643,755,56,35,,,735,651,4.0100000000,14,9,42,4380,1448,131,548,1054,127,162,0.98,Boston Red Sox,Fenway Park II,2510012,107,106,BOS,BOS,BOS +1989,AL,CAL,ANA,W,3,162,81,91,71,N,,N,N,669,5545,1422,208,37,145,429,1011,89,40,,,578,530,3.2800000000,32,20,38,4362,1384,113,465,897,96,173,0.98,California Angels,Anaheim Stadium,2647291,98,98,CAL,CAL,CAL +1989,AL,CHA,CHW,W,7,161,80,69,92,N,,N,N,693,5504,1493,262,36,94,464,873,97,52,,,750,668,4.2300000000,9,5,46,4266,1472,144,539,778,151,176,0.97,Chicago White Sox,Comiskey Park,1045651,97,98,CHW,CHA,CHA +1989,AL,CLE,CLE,E,6,162,81,73,89,N,,N,N,604,5463,1340,221,26,127,499,934,74,51,,,654,589,3.6500000000,23,13,38,4359,1423,107,452,844,118,126,0.98,Cleveland Indians,Cleveland Stadium,1285542,101,102,CLE,CLE,CLE +1989,AL,DET,DET,E,7,162,81,59,103,N,,N,N,617,5432,1315,198,24,116,585,899,103,50,,,816,718,4.5300000000,24,4,26,4281,1514,150,652,831,130,153,0.97,Detroit Tigers,Tiger Stadium,1543656,98,99,DET,DET,DET +1989,AL,KCA,KCR,W,2,162,81,92,70,N,,N,N,690,5475,1428,227,41,101,554,897,154,51,,,635,572,3.5500000000,27,13,38,4353,1415,86,455,978,111,139,0.98,Kansas City Royals,Royals Stadium,2477700,100,100,KCR,KCA,KCA +1989,AL,MIN,MIN,W,5,162,81,80,82,N,,N,N,740,5581,1542,278,35,117,478,743,111,53,,,738,680,4.2800000000,19,8,38,4287,1495,139,500,851,107,141,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2277438,107,107,MIN,MIN,MIN +1989,AL,ML4,MIL,E,4,162,81,81,81,N,,N,N,707,5473,1415,235,32,126,455,791,165,62,,,679,605,3.8000000000,16,8,45,4296,1463,129,457,812,155,164,0.97,Milwaukee Brewers,County Stadium,1970735,99,99,MIL,MIL,MIL +1989,AL,NYA,NYY,E,5,161,81,74,87,N,,N,N,698,5458,1470,229,23,130,502,831,137,60,,,792,707,4.5000000000,15,9,44,4242,1550,150,521,787,122,183,0.98,New York Yankees,Yankee Stadium II,2170485,99,99,NYY,NYA,NYA +1989,AL,OAK,OAK,W,1,162,81,99,63,Y,,Y,Y,712,5416,1414,220,25,127,562,855,157,55,,,576,497,3.0900000000,17,20,57,4344,1287,103,510,930,129,159,0.97,Oakland Athletics,Oakland Coliseum,2667225,97,95,OAK,OAK,OAK +1989,AL,SEA,SEA,W,6,162,81,73,89,N,,N,N,694,5512,1417,237,29,134,489,838,81,55,,,728,639,4.0000000000,15,10,44,4314,1422,114,560,897,143,168,0.97,Seattle Mariners,Kingdome,1298443,103,104,SEA,SEA,SEA +1989,AL,TEX,TEX,W,4,162,81,83,79,N,,N,N,695,5458,1433,260,46,122,503,989,101,49,,,714,623,3.9100000000,26,7,44,4302,1279,119,654,1112,136,137,0.97,Texas Rangers,Arlington Stadium,2043993,102,102,TEX,TEX,TEX +1989,AL,TOR,TOR,E,1,162,81,89,73,Y,,N,N,731,5581,1449,265,40,142,521,923,144,58,,,651,584,3.5800000000,12,12,38,4401,1408,99,478,849,126,164,0.98,Toronto Blue Jays,Exhibition Stadium /Skydome,3375883,94,94,TOR,TOR,TOR +1989,NL,ATL,ATL,W,6,161,79,63,97,N,,N,N,584,5463,1281,201,22,128,485,996,83,54,,,680,595,3.7000000000,15,8,33,4341,1370,114,468,966,152,124,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,984930,102,104,ATL,ATL,ATL +1989,NL,CHN,CHC,E,1,162,81,93,69,Y,,N,N,702,5513,1438,235,45,124,472,921,136,57,,,623,556,3.4300000000,18,10,55,4380,1369,106,532,918,119,130,0.98,Chicago Cubs,Wrigley Field,2491942,108,108,CHC,CHN,CHN +1989,NL,CIN,CIN,W,5,162,81,75,87,N,,N,N,632,5520,1362,243,28,128,493,1028,128,71,,,691,607,3.7300000000,16,9,37,4392,1404,125,559,981,121,108,0.98,Cincinnati Reds,Riverfront Stadium,1979320,104,103,CIN,CIN,CIN +1989,NL,HOU,HOU,W,3,162,82,86,76,N,,N,N,647,5516,1316,239,28,97,530,860,144,62,,,669,598,3.6400000000,19,12,38,4437,1379,105,551,965,140,121,0.97,Houston Astros,Astrodome,1834908,97,97,HOU,HOU,HOU +1989,NL,LAN,LAD,W,4,160,81,77,83,N,,N,N,554,5465,1313,241,17,89,507,885,81,54,,,536,480,2.9500000000,25,19,36,4389,1278,95,504,1052,118,153,0.98,Los Angeles Dodgers,Dodger Stadium,2944653,99,98,LAD,LAN,LAN +1989,NL,MON,WSN,E,4,162,81,81,81,N,,N,N,632,5482,1353,267,30,100,572,958,160,70,,,630,568,3.4800000000,20,13,35,4404,1344,120,519,1059,136,126,0.97,Montreal Expos,Stade Olympique,1783533,102,101,MON,MON,MON +1989,NL,NYN,NYM,E,2,162,81,87,75,N,,N,N,683,5489,1351,280,21,147,504,934,158,53,,,595,532,3.2900000000,24,12,38,4362,1260,115,532,1108,144,110,0.97,New York Mets,Shea Stadium,2918710,95,93,NYM,NYN,NYN +1989,NL,PHI,PHI,E,6,163,81,67,95,N,,N,N,629,5447,1324,215,36,123,558,926,106,50,,,735,643,4.0400000000,10,10,33,4299,1408,127,613,899,133,136,0.97,Philadelphia Phillies,Veterans Stadium,1861985,99,101,PHI,PHI,PHI +1989,NL,PIT,PIT,E,5,164,81,74,88,N,,N,N,637,5539,1334,263,53,95,563,914,155,69,,,680,601,3.6400000000,20,9,40,4461,1394,121,539,827,160,130,0.97,Pittsburgh Pirates,Three Rivers Stadium,1374141,96,96,PIT,PIT,PIT +1989,NL,SDN,SDP,W,2,162,81,89,73,N,,N,N,642,5422,1360,215,32,120,552,1013,136,67,,,626,547,3.3800000000,21,11,52,4371,1359,133,481,933,152,147,0.97,San Diego Padres,Jack Murphy Stadium,2009031,101,101,SDP,SDN,SDN +1989,NL,SFN,SFG,W,1,162,81,92,70,Y,,Y,N,699,5469,1365,241,52,141,508,1071,87,54,,,600,534,3.3000000000,12,16,47,4371,1320,120,471,802,113,135,0.98,San Francisco Giants,Candlestick Park,2059701,97,96,SFG,SFN,SFN +1989,NL,SLN,STL,E,3,164,83,86,76,N,,N,N,632,5492,1418,263,47,73,507,848,155,54,,,608,545,3.3600000000,18,18,43,4383,1330,84,482,844,111,134,0.98,St. Louis Cardinals,Busch Stadium II,3080980,103,103,STL,SLN,SLN +1990,AL,BAL,BAL,E,5,161,80,76,85,N,,N,N,669,5410,1328,234,22,132,660,962,94,52,,,698,644,4.0400000000,10,5,43,4305,1445,161,537,776,91,151,0.98,Baltimore Orioles,Memorial Stadium,2415189,97,98,BAL,BAL,BAL +1990,AL,BOS,BOS,E,1,162,81,88,74,Y,,N,N,699,5516,1502,298,31,106,598,795,53,52,,,664,596,3.7200000000,15,13,44,4326,1439,92,519,997,123,154,0.98,Boston Red Sox,Fenway Park II,2528986,105,105,BOS,BOS,BOS +1990,AL,CAL,ANA,W,4,162,81,80,82,N,,N,N,690,5570,1448,237,27,147,566,1000,69,43,,,706,612,3.7900000000,21,13,42,4362,1482,106,544,944,140,186,0.97,California Angels,Anaheim Stadium,2555688,97,97,CAL,CAL,CAL +1990,AL,CHA,CHW,W,2,162,80,94,68,N,,N,N,682,5402,1393,251,44,106,478,903,140,90,,,633,581,3.6100000000,17,10,68,4347,1313,106,548,914,124,169,0.98,Chicago White Sox,Comiskey Park,2002357,98,98,CHW,CHA,CHA +1990,AL,CLE,CLE,E,4,162,81,77,85,N,,N,N,732,5485,1465,266,41,110,458,836,107,52,,,737,675,4.2600000000,12,10,47,4281,1491,163,518,860,117,146,0.98,Cleveland Indians,Cleveland Stadium,1225240,100,100,CLE,CLE,CLE +1990,AL,DET,DET,E,3,162,81,79,83,N,,N,N,750,5479,1418,241,32,172,634,952,82,57,,,754,698,4.3900000000,15,12,45,4290,1401,154,661,856,131,178,0.97,Detroit Tigers,Tiger Stadium,1495785,101,102,DET,DET,DET +1990,AL,KCA,KCR,W,6,161,81,75,86,N,,N,N,707,5488,1465,316,44,100,498,879,107,62,,,709,620,3.9300000000,18,8,33,4260,1449,116,560,1006,122,161,0.98,Kansas City Royals,Royals Stadium,2244956,98,98,KCR,KCA,KCA +1990,AL,MIN,MIN,W,7,162,81,74,88,N,,N,N,666,5499,1458,281,39,100,445,749,96,53,,,729,657,4.1200000000,13,13,43,4305,1509,134,489,872,101,161,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1751584,107,107,MIN,MIN,MIN +1990,AL,ML4,MIL,E,6,162,81,74,88,N,,N,N,732,5503,1408,247,36,128,519,821,164,72,,,760,655,4.0800000000,23,13,42,4335,1558,121,469,771,149,152,0.97,Milwaukee Brewers,County Stadium,1752900,99,99,MIL,MIL,MIL +1990,AL,NYA,NYY,E,7,162,81,67,95,N,,N,N,603,5483,1322,208,19,147,427,1027,119,45,,,749,675,4.2100000000,15,6,41,4332,1430,144,618,909,126,164,0.98,New York Yankees,Yankee Stadium II,2006436,100,102,NYY,NYA,NYA +1990,AL,OAK,OAK,W,1,162,81,103,59,Y,,Y,N,733,5433,1379,209,22,164,651,992,141,54,,,570,514,3.1800000000,18,16,64,4368,1287,123,494,831,87,152,0.98,Oakland Athletics,Oakland Coliseum,2900217,96,95,OAK,OAK,OAK +1990,AL,SEA,SEA,W,5,162,81,77,85,N,,N,N,640,5474,1419,251,26,107,596,749,105,51,,,680,592,3.6900000000,21,7,41,4329,1319,120,606,1064,130,152,0.97,Seattle Mariners,Kingdome,1509727,101,101,SEA,SEA,SEA +1990,AL,TEX,TEX,W,3,162,82,83,79,N,,N,N,676,5469,1416,257,27,110,575,1054,115,48,,,696,615,3.8300000000,25,9,36,4332,1343,113,623,997,133,161,0.97,Texas Rangers,Arlington Stadium,2057911,100,101,TEX,TEX,TEX +1990,AL,TOR,TOR,E,2,162,81,86,76,N,,N,N,767,5589,1479,263,50,167,526,970,111,52,,,661,620,3.8400000000,6,9,48,4362,1434,143,445,892,86,144,0.98,Toronto Blue Jays,Skydome,3885284,106,105,TOR,TOR,TOR +1990,NL,ATL,ATL,W,6,162,81,65,97,N,,N,N,682,5504,1376,263,26,162,473,1010,92,55,,,821,727,4.5800000000,17,8,30,4287,1527,128,579,938,158,133,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,980129,105,106,ATL,ATL,ATL +1990,NL,CHN,CHC,E,4,162,81,77,85,N,,N,N,690,5600,1474,240,36,136,406,869,151,50,,,774,695,4.3400000000,13,7,42,4326,1510,121,572,877,122,136,0.98,Chicago Cubs,Wrigley Field,2243791,108,108,CHC,CHN,CHN +1990,NL,CIN,CIN,W,1,162,81,91,71,Y,,Y,Y,693,5525,1466,284,40,125,466,913,166,66,,,597,548,3.3900000000,14,12,50,4368,1338,124,543,1029,102,126,0.98,Cincinnati Reds,Riverfront Stadium,2400892,105,105,CIN,CIN,CIN +1990,NL,HOU,HOU,W,4,162,81,75,87,N,,N,N,573,5379,1301,209,32,94,548,997,179,83,,,656,582,3.6100000000,12,6,37,4350,1396,130,496,854,131,124,0.97,Houston Astros,Astrodome,1310927,97,98,HOU,HOU,HOU +1990,NL,LAN,LAD,W,2,162,81,86,76,N,,N,N,728,5491,1436,222,27,129,538,952,141,65,,,685,596,3.7200000000,29,12,29,4326,1364,137,478,1021,130,123,0.97,Los Angeles Dodgers,Dodger Stadium,3002396,98,97,LAD,LAN,LAN +1990,NL,MON,WSN,E,3,162,81,85,77,N,,N,N,662,5453,1363,227,43,114,576,1024,235,99,,,598,552,3.3700000000,18,11,50,4419,1349,127,510,991,110,134,0.98,Montreal Expos,Stade Olympique,1373087,96,96,MON,MON,MON +1990,NL,NYN,NYM,E,2,162,81,91,71,N,,N,N,775,5504,1410,278,21,172,536,851,110,33,,,613,547,3.4200000000,18,14,41,4320,1339,119,444,1217,132,107,0.97,New York Mets,Shea Stadium,2732745,100,99,NYM,NYN,NYN +1990,NL,PHI,PHI,E,4,162,81,77,85,N,,N,N,646,5535,1410,237,27,103,582,915,108,35,,,729,655,4.0700000000,18,7,35,4347,1381,124,651,840,117,150,0.98,Philadelphia Phillies,Veterans Stadium,1992484,99,100,PHI,PHI,PHI +1990,NL,PIT,PIT,E,1,162,81,95,67,Y,,N,N,733,5388,1395,288,42,138,582,914,137,52,,,619,547,3.4000000000,18,8,43,4341,1367,135,413,848,134,125,0.97,Pittsburgh Pirates,Three Rivers Stadium,2049908,96,95,PIT,PIT,PIT +1990,NL,SDN,SDP,W,4,162,81,75,87,N,,N,N,673,5554,1429,243,35,123,509,902,138,59,,,673,597,3.6800000000,21,12,35,4383,1437,147,507,928,141,141,0.97,San Diego Padres,Jack Murphy Stadium,1856396,101,101,SDP,SDN,SDN +1990,NL,SFN,SFG,W,3,162,81,85,77,N,,N,N,719,5573,1459,221,35,152,488,973,109,56,,,710,656,4.0800000000,14,6,45,4338,1477,131,553,788,107,148,0.98,San Francisco Giants,Candlestick Park,1975528,96,96,SFG,SFN,SFN +1990,NL,SLN,STL,E,6,162,81,70,92,N,,N,N,599,5462,1398,255,41,73,517,844,221,74,,,698,620,3.8700000000,8,13,39,4329,1432,98,475,833,129,114,0.97,St. Louis Cardinals,Busch Stadium II,2573225,100,100,STL,SLN,SLN +1991,AL,BAL,BAL,E,6,162,81,67,95,N,,N,N,686,5604,1421,256,29,170,528,974,50,33,,,796,743,4.5900000000,8,8,42,4371,1534,147,504,868,89,172,0.98,Baltimore Orioles,Memorial Stadium,2552753,96,97,BAL,BAL,BAL +1991,AL,BOS,BOS,E,2,162,81,84,78,N,,N,N,731,5530,1486,305,25,126,593,820,59,39,,,712,641,4.0100000000,15,13,45,4317,1405,147,530,999,116,165,0.98,Boston Red Sox,Fenway Park II,2562435,105,105,BOS,BOS,BOS +1991,AL,CAL,ANA,W,7,162,81,81,81,N,,N,N,653,5470,1396,245,29,115,448,928,94,56,,,649,591,3.6900000000,18,10,50,4323,1351,141,543,990,102,156,0.98,California Angels,Anaheim Stadium,2416236,99,100,CAL,CAL,CAL +1991,AL,CHA,CHW,W,2,162,81,87,75,N,,N,N,758,5594,1464,226,39,139,610,896,134,74,,,681,622,3.7900000000,28,8,40,4434,1302,154,601,923,116,151,0.98,Chicago White Sox,Comiskey Park II,2934154,98,97,CHW,CHA,CHA +1991,AL,CLE,CLE,E,7,162,82,57,105,N,,N,N,576,5470,1390,236,26,79,449,888,84,58,,,759,677,4.2300000000,22,8,33,4323,1551,110,441,862,142,150,0.97,Cleveland Indians,Cleveland Stadium,1051863,101,102,CLE,CLE,CLE +1991,AL,DET,DET,E,2,162,81,84,78,N,,N,N,817,5547,1372,259,26,209,699,1185,109,47,,,794,727,4.5100000000,18,8,38,4350,1570,148,593,739,104,171,0.98,Detroit Tigers,Tiger Stadium,1641661,102,102,DET,DET,DET +1991,AL,KCA,KCR,W,6,162,81,82,80,N,,N,N,727,5584,1475,290,41,117,523,969,119,68,,,722,639,3.9200000000,17,12,41,4398,1473,105,529,1004,125,141,0.98,Kansas City Royals,Royals Stadium,2161537,100,101,KCR,KCA,KCA +1991,AL,MIN,MIN,W,1,162,81,95,67,Y,,Y,Y,776,5556,1557,270,42,140,526,747,107,68,,,652,594,3.6900000000,21,12,53,4347,1402,139,488,876,94,161,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2293842,105,104,MIN,MIN,MIN +1991,AL,ML4,MIL,E,4,162,80,83,79,N,,N,N,799,5611,1523,247,53,116,556,802,106,68,,,744,673,4.1400000000,23,11,41,4389,1498,147,527,859,118,176,0.98,Milwaukee Brewers,County Stadium,1478729,98,98,MIL,MIL,MIL +1991,AL,NYA,NYY,E,5,162,81,71,91,N,,N,N,674,5541,1418,249,19,147,473,861,109,36,,,777,709,4.4200000000,3,11,37,4332,1510,152,506,936,133,181,0.97,New York Yankees,Yankee Stadium II,1863733,100,101,NYY,NYA,NYA +1991,AL,OAK,OAK,W,4,162,81,84,78,N,,N,N,760,5410,1342,246,19,159,642,981,151,64,,,776,733,4.5700000000,14,10,49,4332,1425,155,655,892,107,150,0.98,Oakland Athletics,Oakland Coliseum,2713493,94,93,OAK,OAK,OAK +1991,AL,SEA,SEA,W,5,162,81,83,79,N,,N,N,702,5494,1400,268,29,126,588,811,97,44,,,674,617,3.7900000000,10,13,48,4392,1387,136,628,1003,110,187,0.98,Seattle Mariners,Kingdome,2147905,100,100,SEA,SEA,SEA +1991,AL,TEX,TEX,W,3,162,81,85,77,N,,N,N,829,5703,1539,288,31,177,596,1039,102,50,,,814,735,4.4700000000,9,10,41,4437,1486,151,662,1022,134,138,0.97,Texas Rangers,Arlington Stadium,2297720,98,99,TEX,TEX,TEX +1991,AL,TOR,TOR,E,1,162,81,91,71,Y,,N,N,684,5489,1412,295,45,133,499,1043,148,53,,,622,569,3.5000000000,10,16,60,4386,1301,121,523,971,127,115,0.98,Toronto Blue Jays,Skydome,4001527,104,103,TOR,TOR,TOR +1991,NL,ATL,ATL,W,1,162,81,94,68,Y,,Y,N,749,5456,1407,255,30,141,563,906,165,76,,,644,563,3.4900000000,18,7,48,4356,1304,118,481,969,138,122,0.97,Atlanta Braves,Atlanta-Fulton County Stadium,2140217,106,106,ATL,ATL,ATL +1991,NL,CHN,CHC,E,4,160,83,77,83,N,,N,N,695,5522,1395,232,26,159,442,879,123,64,,,734,652,4.0300000000,12,4,40,4368,1415,117,542,927,113,120,0.98,Chicago Cubs,Wrigley Field,2314250,104,105,CHC,CHN,CHN +1991,NL,CIN,CIN,W,5,162,81,74,88,N,,N,N,689,5501,1419,250,27,164,488,1006,124,56,,,691,613,3.8300000000,7,11,43,4320,1372,127,560,997,125,131,0.97,Cincinnati Reds,Riverfront Stadium,2372377,104,104,CIN,CIN,CIN +1991,NL,HOU,HOU,W,6,162,81,65,97,N,,N,N,605,5504,1345,240,43,79,502,1027,125,68,,,717,646,4.0000000000,7,13,36,4359,1347,129,651,1033,161,129,0.97,Houston Astros,Astrodome,1196152,93,94,HOU,HOU,HOU +1991,NL,LAN,LAD,W,2,162,81,93,69,N,,N,N,665,5408,1366,191,29,108,583,957,126,68,,,565,496,3.0600000000,15,14,40,4374,1312,96,500,1028,123,126,0.98,Los Angeles Dodgers,Dodger Stadium,3348170,98,97,LAD,LAN,LAN +1991,NL,MON,WSN,E,6,161,68,71,90,N,,N,N,579,5412,1329,236,42,95,484,1056,221,100,,,655,582,3.6400000000,12,14,39,4320,1304,111,584,909,131,128,0.97,Montreal Expos,Stade Olympique,934742,99,99,MON,MON,MON +1991,NL,NYN,NYM,E,5,161,82,77,84,N,,N,N,640,5359,1305,250,24,117,578,789,153,70,,,646,568,3.5600000000,12,11,39,4311,1403,108,410,1028,143,112,0.97,New York Mets,Shea Stadium,2284484,99,99,NYM,NYN,NYN +1991,NL,PHI,PHI,E,3,162,83,78,84,N,,N,N,629,5521,1332,248,33,111,490,1026,92,30,,,680,627,3.8600000000,16,11,35,4389,1346,111,670,988,116,111,0.98,Philadelphia Phillies,Veterans Stadium,2050012,99,99,PHI,PHI,PHI +1991,NL,PIT,PIT,E,1,162,84,98,64,Y,,N,N,768,5449,1433,259,50,126,620,901,124,46,,,632,557,3.4400000000,18,11,51,4368,1411,117,401,919,120,134,0.98,Pittsburgh Pirates,Three Rivers Stadium,2065302,99,98,PIT,PIT,PIT +1991,NL,SDN,SDP,W,3,162,81,84,78,N,,N,N,636,5408,1321,204,36,121,501,1069,101,64,,,646,576,3.5700000000,14,11,47,4356,1385,139,457,921,113,130,0.98,San Diego Padres,Jack Murphy Stadium,1804289,103,103,SDP,SDN,SDN +1991,NL,SFN,SFG,W,4,162,81,75,87,N,,N,N,649,5463,1345,215,48,141,471,973,95,57,,,697,646,4.0300000000,10,10,45,4326,1397,143,544,905,108,151,0.98,San Francisco Giants,Candlestick Park,1737478,96,97,SFG,SFN,SFN +1991,NL,SLN,STL,E,2,162,84,84,78,N,,N,N,651,5362,1366,239,53,68,532,857,202,110,,,648,588,3.6900000000,9,5,51,4305,1367,114,454,822,105,133,0.98,St. Louis Cardinals,Busch Stadium II,2448699,100,100,STL,SLN,SLN +1992,AL,BAL,BAL,E,3,162,81,89,73,N,,N,N,705,5485,1423,243,36,148,647,827,89,48,,,656,617,3.7900000000,20,16,48,4392,1419,124,518,846,93,168,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3567819,102,101,BAL,BAL,BAL +1992,AL,BOS,BOS,E,7,162,81,73,89,N,,N,N,599,5461,1343,259,21,84,591,865,44,48,,,669,576,3.5800000000,22,13,39,4344,1403,107,535,943,139,170,0.97,Boston Red Sox,Fenway Park II,2468574,106,107,BOS,BOS,BOS +1992,AL,CAL,ANA,W,5,162,81,72,90,N,,N,N,579,5364,1306,202,20,88,416,882,160,101,,,671,617,3.8400000000,26,13,42,4338,1449,130,532,888,134,172,0.97,California Angels,Anaheim Stadium,2065444,100,101,CAL,CAL,CAL +1992,AL,CHA,CHW,W,3,162,82,86,76,N,,N,N,738,5498,1434,269,36,110,622,784,160,57,,,690,620,3.8200000000,21,5,52,4383,1400,123,550,810,129,134,0.97,Chicago White Sox,Comiskey Park II,2681156,99,99,CHW,CHA,CHA +1992,AL,CLE,CLE,E,4,162,81,76,86,N,,N,N,674,5620,1495,227,24,127,448,885,144,67,,,746,671,4.1100000000,13,7,46,4410,1507,159,566,890,141,176,0.97,Cleveland Indians,Cleveland Stadium,1224094,99,100,CLE,CLE,CLE +1992,AL,DET,DET,E,6,162,80,75,87,N,,N,N,791,5515,1411,256,16,182,675,1055,66,45,,,794,733,4.6000000000,10,4,36,4305,1534,155,564,693,116,164,0.98,Detroit Tigers,Tiger Stadium,1423963,101,100,DET,DET,DET +1992,AL,KCA,KCR,W,5,162,81,72,90,N,,N,N,610,5501,1411,284,42,75,439,741,131,71,,,667,613,3.8100000000,9,12,44,4341,1426,106,512,834,122,164,0.98,Kansas City Royals,Royals Stadium,1867689,102,103,KCR,KCA,KCA +1992,AL,MIN,MIN,W,2,162,81,90,72,N,,N,N,747,5582,1544,275,27,104,527,834,123,74,,,653,597,3.7000000000,16,13,50,4359,1391,121,479,923,94,155,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2482428,103,102,MIN,MIN,MIN +1992,AL,ML4,MIL,E,2,162,81,92,70,N,,N,N,740,5504,1477,272,35,82,511,779,256,115,,,604,555,3.4300000000,19,14,39,4371,1344,127,435,793,89,146,0.98,Milwaukee Brewers,County Stadium,1857351,99,98,MIL,MIL,MIL +1992,AL,NYA,NYY,E,4,162,81,76,86,N,,N,N,733,5593,1462,281,18,163,536,903,78,37,,,746,679,4.2100000000,20,9,44,4356,1453,129,612,851,112,165,0.98,New York Yankees,Yankee Stadium II,1748737,100,100,NYY,NYA,NYA +1992,AL,OAK,OAK,W,1,162,81,96,66,Y,,N,N,745,5387,1389,219,24,142,707,831,143,59,,,672,600,3.7300000000,8,9,58,4341,1396,129,601,843,125,158,0.97,Oakland Athletics,Oakland Coliseum,2494160,94,95,OAK,OAK,OAK +1992,AL,SEA,SEA,W,7,162,81,64,98,N,,N,N,679,5564,1466,278,24,149,474,841,100,55,,,799,731,4.5500000000,21,9,30,4335,1467,129,661,894,112,170,0.98,Seattle Mariners,Kingdome,1651367,100,100,SEA,SEA,SEA +1992,AL,TEX,TEX,W,4,162,81,77,85,N,,N,N,682,5537,1387,266,23,159,550,1036,81,44,,,753,663,4.0900000000,19,3,42,4380,1471,113,598,1034,153,153,0.97,Texas Rangers,Arlington Stadium,2198231,97,97,TEX,TEX,TEX +1992,AL,TOR,TOR,E,1,162,81,96,66,Y,,Y,Y,780,5536,1458,265,40,163,561,933,129,39,,,682,626,3.9100000000,18,14,49,4320,1346,124,541,954,93,109,0.98,Toronto Blue Jays,Skydome,4028318,105,104,TOR,TOR,TOR +1992,NL,ATL,ATL,W,1,162,81,98,64,Y,,Y,N,682,5480,1391,223,48,138,493,924,126,60,,,569,509,3.1400000000,26,24,41,4380,1321,89,489,948,109,121,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,3077400,107,105,ATL,ATL,ATL +1992,NL,CHN,CHC,E,4,162,81,78,84,N,,N,N,593,5590,1420,221,41,104,417,816,77,51,,,624,553,3.3900000000,16,11,37,4407,1337,107,575,901,114,142,0.98,Chicago Cubs,Wrigley Field,2126720,102,103,CHC,CHN,CHN +1992,NL,CIN,CIN,W,2,162,81,90,72,N,,N,N,660,5460,1418,281,44,99,563,888,125,65,,,609,557,3.4600000000,9,11,55,4347,1362,109,470,1060,96,128,0.98,Cincinnati Reds,Riverfront Stadium,2315946,103,103,CIN,CIN,CIN +1992,NL,HOU,HOU,W,4,162,81,81,81,N,,N,N,608,5480,1350,255,38,96,506,1025,139,54,,,668,603,3.7200000000,5,12,45,4377,1386,114,539,978,112,125,0.98,Houston Astros,Astrodome,1211412,95,95,HOU,HOU,HOU +1992,NL,LAN,LAD,W,6,162,81,63,99,N,,N,N,548,5368,1333,201,34,72,503,899,142,78,,,636,545,3.4100000000,18,13,29,4314,1401,82,553,981,173,136,0.97,Los Angeles Dodgers,Dodger Stadium,2473266,99,99,LAD,LAN,LAN +1992,NL,MON,WSN,E,2,162,81,87,75,N,,N,N,648,5477,1381,263,37,102,463,976,196,63,,,581,530,3.2500000000,11,14,49,4404,1296,92,525,1014,124,113,0.98,Montreal Expos,Stade Olympique,1669127,99,99,MON,MON,MON +1992,NL,NYN,NYM,E,5,162,81,72,90,N,,N,N,599,5340,1254,259,17,93,572,956,129,52,,,653,588,3.6600000000,17,13,34,4338,1404,98,482,1025,116,134,0.98,New York Mets,Shea Stadium,1779534,99,99,NYM,NYN,NYN +1992,NL,PHI,PHI,E,6,162,81,70,92,N,,N,N,686,5500,1392,255,36,118,509,1059,127,31,,,717,652,4.1100000000,27,7,34,4284,1387,113,549,851,131,128,0.97,Philadelphia Phillies,Veterans Stadium,1927448,100,100,PHI,PHI,PHI +1992,NL,PIT,PIT,E,1,162,81,96,66,Y,,N,N,693,5527,1409,272,54,106,569,872,110,53,,,595,551,3.3500000000,20,20,43,4437,1410,101,455,844,101,144,0.98,Pittsburgh Pirates,Three Rivers Stadium,1829395,99,98,PIT,PIT,PIT +1992,NL,SDN,SDP,W,3,162,81,82,80,N,,N,N,617,5476,1396,255,30,135,453,864,69,52,,,636,578,3.5600000000,9,11,46,4383,1444,111,439,971,115,127,0.98,San Diego Padres,Jack Murphy Stadium,1721406,101,102,SDP,SDN,SDN +1992,NL,SFN,SFG,W,5,162,81,72,90,N,,N,N,574,5456,1330,220,36,105,435,1067,112,64,,,647,586,3.6100000000,9,12,30,4383,1385,128,502,927,111,174,0.98,San Francisco Giants,Candlestick Park,1560998,94,94,SFG,SFN,SFN +1992,NL,SLN,STL,E,3,162,81,83,79,N,,N,N,631,5594,1464,262,44,94,495,996,208,118,,,604,556,3.3800000000,10,9,47,4440,1405,118,400,842,91,146,0.98,St. Louis Cardinals,Busch Stadium II,2418483,97,97,STL,SLN,SLN +1993,AL,BAL,BAL,E,3,162,81,85,77,N,,N,N,786,5508,1470,287,24,157,655,930,73,54,,,745,691,4.3100000000,21,10,42,4326,1427,153,579,900,100,171,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3644965,104,103,BAL,BAL,BAL +1993,AL,BOS,BOS,E,5,162,81,80,82,N,,N,N,686,5496,1451,319,29,114,508,871,73,38,,,698,608,3.7700000000,9,11,44,4356,1379,127,552,997,122,155,0.98,Boston Red Sox,Fenway Park II,2422021,106,107,BOS,BOS,BOS +1993,AL,CAL,ANA,W,5,162,81,71,91,N,,N,N,684,5391,1399,259,24,114,564,930,169,100,,,770,690,4.3400000000,26,6,41,4290,1482,153,550,843,120,161,0.98,California Angels,Anaheim Stadium,2057460,103,104,CAL,CAL,CAL +1993,AL,CHA,CHW,W,1,162,81,94,68,Y,,N,N,776,5483,1454,228,44,162,604,834,106,57,,,664,598,3.7000000000,16,11,48,4362,1398,125,566,974,112,153,0.98,Chicago White Sox,Comiskey Park II,2581091,98,97,CHW,CHA,CHA +1993,AL,CLE,CLE,E,6,162,81,76,86,N,,N,N,790,5619,1547,264,31,141,488,843,159,55,,,813,735,4.5800000000,7,8,45,4335,1591,182,591,888,148,174,0.97,Cleveland Indians,Cleveland Stadium,2177908,100,101,CLE,CLE,CLE +1993,AL,DET,DET,E,3,162,81,85,77,N,,N,N,899,5620,1546,282,38,178,765,1122,104,63,,,837,742,4.6500000000,11,7,36,4308,1547,188,542,828,132,148,0.97,Detroit Tigers,Tiger Stadium,1971421,99,99,DET,DET,DET +1993,AL,KCA,KCR,W,3,162,81,84,78,N,,N,N,675,5522,1455,294,35,125,428,936,100,75,,,694,649,4.0400000000,16,6,48,4335,1379,105,571,985,96,150,0.98,Kansas City Royals,Kauffman Stadium,1934578,106,106,KCR,KCA,KCA +1993,AL,MIN,MIN,W,5,162,81,71,91,N,,N,N,693,5601,1480,261,27,121,493,850,83,59,,,830,756,4.7100000000,5,3,44,4332,1591,148,514,901,100,160,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2048673,100,100,MIN,MIN,MIN +1993,AL,ML4,MIL,E,7,162,81,69,93,N,,N,N,733,5525,1426,240,25,125,555,932,138,93,,,792,715,4.4500000000,26,6,29,4341,1511,153,522,810,131,148,0.97,Milwaukee Brewers,County Stadium,1688080,99,99,MIL,MIL,MIL +1993,AL,NYA,NYY,E,2,162,81,88,74,N,,N,N,821,5615,1568,294,24,178,629,910,39,35,,,761,695,4.3500000000,11,13,38,4314,1467,170,552,899,101,166,0.98,New York Yankees,Yankee Stadium II,2416942,97,96,NYY,NYA,NYA +1993,AL,OAK,OAK,W,7,162,81,68,94,N,,N,N,715,5543,1408,260,21,158,622,1048,131,59,,,846,791,4.9000000000,8,2,42,4356,1551,157,680,864,111,161,0.98,Oakland Athletics,Oakland Coliseum,2035025,94,94,OAK,OAK,OAK +1993,AL,SEA,SEA,W,4,162,81,82,80,N,,N,N,734,5494,1429,272,24,161,624,901,91,68,,,731,678,4.2000000000,22,10,41,4359,1421,135,605,1083,90,173,0.98,Seattle Mariners,Kingdome,2052638,101,102,SEA,SEA,SEA +1993,AL,TEX,TEX,W,2,162,81,86,76,N,,N,N,835,5510,1472,284,39,181,483,984,113,67,,,751,684,4.2800000000,20,6,45,4314,1476,144,562,957,130,145,0.97,Texas Rangers,Arlington Stadium,2244616,96,96,TEX,TEX,TEX +1993,AL,TOR,TOR,E,1,162,81,95,67,Y,,Y,Y,847,5579,1556,317,42,159,588,861,170,49,,,742,674,4.2100000000,11,11,50,4323,1441,134,620,1023,107,144,0.98,Toronto Blue Jays,Skydome,4057947,101,100,TOR,TOR,TOR +1993,NL,ATL,ATL,W,1,162,81,104,58,Y,,N,N,767,5515,1444,239,29,169,560,946,125,48,,,559,508,3.1400000000,18,16,46,4365,1297,101,480,1036,108,146,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,3884720,101,100,ATL,ATL,ATL +1993,NL,CHN,CHC,E,4,163,82,84,78,N,,N,N,738,5627,1521,259,32,161,446,923,100,43,,,739,673,4.1800000000,8,5,56,4347,1514,153,470,905,115,162,0.98,Chicago Cubs,Wrigley Field,2653763,98,98,CHC,CHN,CHN +1993,NL,CIN,CIN,W,5,162,81,73,89,N,,N,N,722,5517,1457,261,28,137,485,1025,142,59,,,785,719,4.5100000000,11,8,37,4302,1510,158,508,996,120,133,0.98,Cincinnati Reds,Riverfront Stadium,2453232,101,100,CIN,CIN,CIN +1993,NL,COL,COL,W,6,162,81,67,95,N,,N,N,758,5517,1507,278,59,142,388,944,146,90,,,967,860,5.4100000000,9,0,35,4293,1664,181,609,913,167,149,0.97,Colorado Rockies,Mile High Stadium,4483350,117,118,COL,COL,COL +1993,NL,FLO,FLA,E,6,162,81,64,98,N,,N,N,581,5475,1356,197,31,94,498,1054,117,56,,,724,661,4.1300000000,4,5,48,4320,1437,135,598,945,122,130,0.98,Florida Marlins,Joe Robbie Stadium,3064847,104,106,FLA,FLO,FLO +1993,NL,HOU,HOU,W,3,162,81,85,77,N,,N,N,716,5464,1459,288,37,138,497,911,103,60,,,630,559,3.4900000000,18,14,42,4323,1363,117,476,1056,125,141,0.97,Houston Astros,Astrodome,2084618,96,96,HOU,HOU,HOU +1993,NL,LAN,LAD,W,4,162,81,81,81,N,,N,N,675,5588,1458,234,28,130,492,937,126,61,,,662,572,3.5000000000,17,9,36,4416,1406,103,567,1043,132,141,0.97,Los Angeles Dodgers,Dodger Stadium,3170393,95,95,LAD,LAN,LAN +1993,NL,MON,WSN,E,2,163,81,94,68,N,,N,N,732,5493,1410,270,36,122,542,860,228,56,,,682,574,3.5500000000,8,7,61,4368,1369,119,521,934,159,144,0.97,Montreal Expos,Stade Olympique,1641437,105,104,MON,MON,MON +1993,NL,NYN,NYM,E,7,162,81,59,103,N,,N,N,672,5448,1350,228,37,158,448,879,79,50,,,744,647,4.0500000000,16,8,22,4314,1483,139,434,867,156,143,0.97,New York Mets,Shea Stadium,1873183,99,100,NYM,NYN,NYN +1993,NL,PHI,PHI,E,1,162,81,97,65,Y,,Y,N,877,5685,1555,297,51,156,665,1049,91,32,,,740,646,3.9500000000,24,11,46,4416,1419,129,573,1117,141,123,0.97,Philadelphia Phillies,Veterans Stadium,3137674,99,98,PHI,PHI,PHI +1993,NL,PIT,PIT,E,5,162,81,75,87,N,,N,N,707,5549,1482,267,50,110,536,972,92,55,,,806,766,4.7700000000,12,5,34,4335,1557,153,485,832,105,161,0.98,Pittsburgh Pirates,Three Rivers Stadium,1650593,99,100,PIT,PIT,PIT +1993,NL,SDN,SDP,W,7,162,81,61,101,N,,N,N,679,5503,1386,239,28,153,443,1046,92,41,,,772,675,4.2300000000,8,6,32,4311,1470,148,558,957,160,129,0.97,San Diego Padres,Jack Murphy Stadium,1375432,102,102,SDP,SDN,SDN +1993,NL,SFN,SFG,W,2,162,81,103,59,N,,N,N,808,5557,1534,269,33,168,516,930,120,65,,,636,584,3.6100000000,4,9,50,4368,1385,168,442,982,101,169,0.98,San Francisco Giants,Candlestick Park,2606354,97,96,SFG,SFN,SFN +1993,NL,SLN,STL,E,3,162,81,87,75,N,,N,N,758,5551,1508,262,34,118,588,882,153,72,,,744,660,4.0900000000,5,7,54,4359,1553,152,383,775,159,157,0.97,St. Louis Cardinals,Busch Stadium II,2844977,98,98,STL,SLN,SLN +1994,AL,BAL,BAL,E,2,112,55,63,49,,,,,589,3856,1047,185,20,139,438,655,69,13,,,497,477,4.3100000000,13,3,37,2991,1005,131,351,666,57,103,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2535359,105,104,BAL,BAL,BAL +1994,AL,BOS,BOS,E,4,115,64,54,61,,,,,552,3940,1038,222,19,120,404,723,81,38,,,621,564,4.9300000000,6,1,30,3087,1104,120,450,729,81,124,0.98,Boston Red Sox,Fenway Park II,1775818,105,105,BOS,BOS,BOS +1994,AL,CAL,ANA,W,4,115,63,47,68,,,,,543,3943,1042,178,16,120,402,715,65,54,,,660,618,5.4200000000,11,3,21,3081,1149,150,436,682,76,110,0.98,California Angels,Anaheim Stadium,1512622,101,101,CAL,CAL,CAL +1994,AL,CHA,CHW,C,1,113,53,67,46,,,,,633,3942,1133,175,39,121,497,568,77,27,,,498,444,3.9500000000,13,6,20,3034,964,115,377,754,79,91,0.98,Chicago White Sox,Comiskey Park II,1697398,99,98,CHW,CHA,CHA +1994,AL,CLE,CLE,C,2,113,51,66,47,,,,,679,4022,1165,240,20,167,382,629,131,48,,,562,493,4.3600000000,17,5,21,3054,1097,94,404,666,90,119,0.98,Cleveland Indians,Jacobs Field,1995174,99,97,CLE,CLE,CLE +1994,AL,DET,DET,E,5,115,58,53,62,,,,,652,3955,1048,216,25,161,520,897,46,33,,,671,609,5.3800000000,15,1,20,3054,1139,148,449,560,82,90,0.98,Detroit Tigers,Tiger Stadium,1184783,101,101,DET,DET,DET +1994,AL,KCA,KCR,C,3,115,59,64,51,,,,,574,3911,1051,211,38,100,376,698,140,62,,,532,485,4.2300000000,5,3,38,3093,1018,95,392,717,80,102,0.98,Kansas City Royals,Kauffman Stadium,1400494,104,104,KCR,KCA,KCA +1994,AL,MIN,MIN,C,4,113,59,53,60,,,,,594,3952,1092,239,23,103,359,635,94,30,,,688,634,5.6800000000,6,2,29,3015,1197,153,388,602,75,99,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1398565,100,102,MIN,MIN,MIN +1994,AL,ML4,MIL,C,5,115,56,53,62,,,,,547,3978,1045,238,21,99,417,680,59,37,,,586,532,4.6200000000,11,1,23,3108,1071,127,421,577,85,130,0.98,Milwaukee Brewers,County Stadium,1268399,104,105,MIL,MIL,MIL +1994,AL,NYA,NYY,E,1,113,57,70,43,,,,,670,3986,1155,238,16,139,530,660,55,40,,,534,491,4.3400000000,8,0,31,3057,1045,120,398,656,80,122,0.98,New York Yankees,Yankee Stadium II,1675556,97,96,NYY,NYA,NYA +1994,AL,OAK,OAK,W,2,114,56,51,63,,,,,549,3885,1009,178,13,113,417,686,91,39,,,589,537,4.8200000000,12,3,23,3009,979,128,510,732,88,105,0.97,Oakland Athletics,Oakland Coliseum,1242692,91,92,OAK,OAK,OAK +1994,AL,SEA,SEA,W,3,112,44,49,63,,,,,569,3883,1045,211,18,153,372,652,48,21,,,616,546,4.9900000000,13,4,21,2952,1051,109,486,763,95,102,0.97,Seattle Mariners,Kingdome,1104206,102,102,SEA,SEA,SEA +1994,AL,TEX,TEX,W,1,114,63,52,62,,,,,613,3983,1114,198,27,124,437,730,82,35,,,697,619,5.4500000000,10,3,26,3069,1176,157,394,683,105,106,0.97,Texas Rangers,The Ballpark at Arlington,2503198,100,101,TEX,TEX,TEX +1994,AL,TOR,TOR,E,3,115,59,55,60,,,,,566,3962,1064,210,30,115,387,691,79,26,,,579,535,4.7000000000,13,4,26,3075,1053,127,482,832,80,105,0.98,Toronto Blue Jays,Skydome,2907933,100,100,TOR,TOR,TOR +1994,NL,ATL,ATL,E,2,114,55,68,46,,,,,542,3861,1031,198,18,137,377,668,48,31,,,448,407,3.5700000000,16,4,26,3078,929,76,378,865,81,85,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,2539240,102,100,ATL,ATL,ATL +1994,NL,CHN,CHC,C,5,113,59,49,64,,,,,500,3918,1015,189,26,109,364,750,69,53,,,549,508,4.4700000000,5,1,27,3069,1054,120,392,717,81,110,0.98,Chicago Cubs,Wrigley Field,1845208,99,99,CHC,CHN,CHN +1994,NL,CIN,CIN,C,1,115,60,66,48,,,,,609,3999,1142,211,36,124,388,738,119,51,,,490,436,3.7800000000,6,2,27,3114,1037,117,339,799,73,91,0.98,Cincinnati Reds,Riverfront Stadium,1897681,99,99,CIN,CIN,CIN +1994,NL,COL,COL,W,3,117,57,53,64,,,,,573,4006,1098,206,39,125,378,761,91,53,,,638,590,5.1500000000,4,1,28,3093,1185,120,448,703,84,117,0.98,Colorado Rockies,Mile High Stadium,3281511,117,118,COL,COL,COL +1994,NL,FLO,FLA,E,5,115,59,51,64,,,,,468,3926,1043,180,24,94,349,746,65,26,,,576,508,4.5000000000,5,3,30,3045,1069,120,428,649,95,111,0.97,Florida Marlins,Joe Robbie Stadium,1937467,102,103,FLA,FLO,FLO +1994,NL,HOU,HOU,C,2,115,59,66,49,,,,,602,3955,1099,252,25,120,394,718,124,44,,,503,454,3.9700000000,9,3,29,3087,1043,102,367,739,72,110,0.98,Houston Astros,Astrodome,1561136,95,94,HOU,HOU,HOU +1994,NL,LAN,LAD,W,1,114,55,58,56,,,,,532,3904,1055,160,29,115,366,687,74,37,,,509,477,4.2300000000,14,4,20,3042,1041,90,354,732,88,104,0.98,Los Angeles Dodgers,Dodger Stadium,2279355,94,94,LAD,LAN,LAN +1994,NL,MON,WSN,E,1,114,52,74,40,,,,,585,4000,1111,246,30,108,379,669,137,36,,,454,410,3.5600000000,4,2,46,3108,970,100,288,805,94,90,0.97,Montreal Expos,Stade Olympique,1276250,101,101,MON,MON,MON +1994,NL,NYN,NYM,E,3,113,53,55,58,,,,,506,3869,966,164,21,117,336,807,25,26,,,526,469,4.1300000000,7,2,35,3069,1069,117,332,640,89,112,0.98,New York Mets,Shea Stadium,1151471,99,99,NYM,NYN,NYN +1994,NL,PHI,PHI,E,4,115,60,54,61,,,,,521,3927,1028,208,28,80,396,711,67,24,,,497,438,3.8500000000,7,1,30,3072,1028,98,377,699,94,96,0.97,Philadelphia Phillies,Veterans Stadium,2290971,102,102,PHI,PHI,PHI +1994,NL,PIT,PIT,C,3,114,61,53,61,,,,,466,3864,1001,198,23,80,349,725,53,25,,,580,518,4.6400000000,8,1,24,3015,1094,117,370,650,89,131,0.98,Pittsburgh Pirates,Three Rivers Stadium,1222520,101,102,PIT,PIT,PIT +1994,NL,SDN,SDP,W,4,117,57,47,70,,,,,479,4068,1117,200,19,92,319,762,79,37,,,531,474,4.0800000000,8,3,27,3135,1008,99,393,862,111,82,0.97,San Diego Padres,Jack Murphy Stadium,953857,97,98,SDP,SDN,SDN +1994,NL,SFN,SFG,W,2,115,60,55,60,,,,,504,3869,963,159,32,123,364,719,114,40,,,500,454,3.9900000000,2,0,33,3075,1014,122,372,655,68,113,0.98,San Francisco Giants,Candlestick Park,1704608,94,94,SFG,SFN,SFN +1994,NL,SLN,STL,C,3,115,56,53,61,,,,,535,3902,1026,213,27,108,434,686,76,46,,,621,581,5.1400000000,7,3,29,3054,1154,134,355,632,80,119,0.98,St. Louis Cardinals,Busch Stadium II,1866544,98,99,STL,SLN,SLN +1995,AL,BAL,BAL,E,3,144,72,71,73,N,N,N,N,704,4837,1267,229,27,173,574,803,92,45,,,640,607,4.3100000000,19,10,29,3801,1165,149,523,930,72,141,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3098475,102,101,BAL,BAL,BAL +1995,AL,BOS,BOS,E,1,144,72,86,58,Y,N,N,N,791,4997,1399,286,31,175,560,923,99,44,,,698,630,4.3900000000,7,9,39,3876,1338,127,476,888,120,151,0.97,Boston Red Sox,Fenway Park II,2164410,103,103,BOS,BOS,BOS +1995,AL,CAL,ANA,W,2,145,72,78,67,N,N,N,N,801,5019,1390,252,25,186,564,889,58,39,,,697,645,4.5200000000,8,9,42,3852,1310,163,486,901,95,120,0.98,California Angels,Anaheim Stadium,1748680,99,99,CAL,CAL,CAL +1995,AL,CHA,CHW,C,3,145,72,68,76,N,N,N,N,755,5060,1417,252,37,146,576,767,110,39,,,758,692,4.8500000000,12,4,36,3852,1374,164,617,892,108,131,0.98,Chicago White Sox,Comiskey Park II,1609773,96,95,CHW,CHA,CHA +1995,AL,CLE,CLE,C,1,144,72,100,44,Y,N,Y,N,840,5028,1461,279,23,207,542,766,132,53,,,607,554,3.8300000000,10,10,50,3903,1261,135,445,926,101,142,0.98,Cleveland Indians,Jacobs Field,2842745,101,99,CLE,CLE,CLE +1995,AL,DET,DET,E,4,144,72,60,84,N,N,N,N,654,4865,1204,228,29,159,551,987,73,36,,,844,778,5.4900000000,5,3,38,3825,1509,170,536,729,106,143,0.98,Detroit Tigers,Tiger Stadium,1180979,100,101,DET,DET,DET +1995,AL,KCA,KCR,C,2,144,72,70,74,N,N,N,N,629,4903,1275,240,35,119,475,849,120,53,,,691,643,4.4900000000,11,10,37,3864,1323,142,503,763,90,168,0.98,Kansas City Royals,Kauffman Stadium,1233530,101,101,KCR,KCA,KCA +1995,AL,MIN,MIN,C,5,144,72,56,88,N,N,N,N,703,5005,1398,270,34,120,471,916,105,57,,,889,814,5.7600000000,7,2,27,3816,1450,210,533,790,100,141,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1057667,101,102,MIN,MIN,MIN +1995,AL,ML4,MIL,C,4,144,72,65,79,N,N,N,N,740,5000,1329,249,42,128,502,800,105,40,,,747,689,4.8200000000,7,4,31,3858,1391,146,603,699,105,186,0.98,Milwaukee Brewers,County Stadium,1087560,105,105,MIL,MIL,MIL +1995,AL,NYA,NYY,E,2,145,73,79,65,N,Y,N,N,749,4947,1365,280,34,122,625,851,50,30,,,688,651,4.5600000000,18,5,35,3852,1286,159,535,908,73,121,0.98,New York Yankees,Yankee Stadium II,1705263,99,98,NYY,NYA,NYA +1995,AL,OAK,OAK,W,4,144,72,67,77,N,N,N,N,730,4916,1296,228,18,169,565,911,112,46,,,761,697,4.9300000000,8,4,34,3819,1320,153,556,890,101,151,0.98,Oakland Athletics,Oakland Coliseum,1174310,91,91,OAK,OAK,OAK +1995,AL,SEA,SEA,W,1,145,73,79,66,Y,N,N,N,796,4996,1377,276,20,182,549,871,110,41,,,708,644,4.5000000000,9,8,39,3868,1343,149,591,1068,104,108,0.98,Seattle Mariners,Kingdome,1643203,101,101,SEA,SEA,SEA +1995,AL,TEX,TEX,W,3,144,72,74,70,N,N,N,N,691,4913,1304,247,24,138,526,877,90,47,,,720,665,4.6600000000,14,4,34,3855,1385,152,514,838,98,156,0.98,Texas Rangers,The Ballpark at Arlington,1985910,103,103,TEX,TEX,TEX +1995,AL,TOR,TOR,E,5,144,72,56,88,N,N,N,N,642,5036,1309,275,27,140,492,906,75,16,,,777,701,4.8800000000,16,8,22,3876,1336,145,654,894,97,131,0.98,Toronto Blue Jays,Skydome,2826483,99,100,TOR,TOR,TOR +1995,NL,ATL,ATL,E,1,144,72,90,54,Y,N,Y,Y,645,4814,1202,210,27,168,520,933,73,43,,,540,493,3.4400000000,18,11,34,3873,1184,107,436,1087,100,113,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,2561831,103,102,ATL,ATL,ATL +1995,NL,CHN,CHC,C,3,144,72,73,71,N,N,N,N,693,4963,1315,267,39,158,440,953,105,37,,,671,597,4.1300000000,6,12,45,3903,1313,162,518,926,115,115,0.97,Chicago Cubs,Wrigley Field,1918265,98,98,CHC,CHN,CHN +1995,NL,CIN,CIN,C,1,144,72,85,59,Y,N,N,N,747,4903,1326,277,35,161,519,946,190,68,,,623,577,4.0300000000,8,10,38,3867,1270,131,424,903,79,140,0.98,Cincinnati Reds,Riverfront Stadium,1837649,100,99,CIN,CIN,CIN +1995,NL,COL,COL,W,2,144,72,77,67,N,Y,N,N,785,4994,1406,259,43,200,484,943,125,59,,,783,711,4.9700000000,1,1,43,3864,1443,160,512,891,107,146,0.98,Colorado Rockies,Coors Field,3390037,129,129,COL,COL,COL +1995,NL,FLO,FLA,E,4,143,71,67,76,N,N,N,N,673,4886,1278,214,29,144,517,916,131,53,,,673,610,4.2700000000,12,7,29,3858,1299,139,562,994,115,143,0.97,Florida Marlins,Joe Robbie Stadium,1700466,101,101,FLA,FLO,FLO +1995,NL,HOU,HOU,C,2,144,72,76,68,N,N,N,N,747,5097,1403,260,22,109,566,992,176,60,,,674,595,4.0600000000,6,8,32,3960,1357,118,460,1056,121,120,0.97,Houston Astros,Astrodome,1363801,93,93,HOU,HOU,HOU +1995,NL,LAN,LAD,W,1,144,72,78,66,Y,N,N,N,634,4942,1303,191,31,140,468,1023,127,45,,,609,527,3.6600000000,16,11,37,3885,1188,125,462,1060,130,120,0.97,Los Angeles Dodgers,Dodger Stadium,2766251,91,91,LAD,LAN,LAN +1995,NL,MON,WSN,E,5,144,72,66,78,N,N,N,N,621,4905,1268,265,24,118,400,901,120,49,,,638,586,4.1100000000,7,9,42,3849,1286,128,416,950,109,119,0.98,Montreal Expos,Stade Olympique,1309618,104,103,MON,MON,MON +1995,NL,NYN,NYM,E,2,144,72,69,75,N,N,N,N,657,4958,1323,218,34,125,446,994,58,39,,,618,557,3.8800000000,9,9,36,3873,1296,133,401,901,115,125,0.97,New York Mets,Shea Stadium,1273183,96,97,NYM,NYN,NYN +1995,NL,PHI,PHI,E,2,144,72,69,75,N,N,N,N,615,4950,1296,263,30,94,497,884,72,25,,,658,603,4.2100000000,8,8,41,3870,1241,134,538,980,96,139,0.98,Philadelphia Phillies,Veterans Stadium,2043598,100,101,PHI,PHI,PHI +1995,NL,PIT,PIT,C,5,144,72,58,86,N,N,N,N,629,4937,1281,245,27,125,456,972,84,55,,,736,666,4.7000000000,11,7,29,3825,1407,130,477,871,121,138,0.97,Pittsburgh Pirates,Three Rivers Stadium,905517,102,103,PIT,PIT,PIT +1995,NL,SDN,SDP,W,3,144,72,70,74,N,N,N,N,668,4950,1345,231,20,116,447,872,124,46,,,672,589,4.1300000000,6,10,35,3852,1242,142,512,1047,108,130,0.98,San Diego Padres,Jack Murphy Stadium,1041805,97,97,SDP,SDN,SDN +1995,NL,SFN,SFG,W,4,144,72,67,77,N,N,N,N,652,4971,1256,229,33,152,472,1060,138,46,,,776,698,4.8600000000,12,5,34,3879,1368,173,505,801,106,142,0.98,San Francisco Giants,Candlestick Park,1241500,96,97,SFG,SFN,SFN +1995,NL,SLN,STL,C,4,143,72,62,81,N,N,N,N,563,4779,1182,238,24,107,436,920,79,46,,,658,575,4.0900000000,4,6,38,3795,1290,135,445,842,113,156,0.98,St. Louis Cardinals,Busch Stadium II,1756727,99,100,STL,SLN,SLN +1996,AL,BAL,BAL,E,2,163,82,88,74,N,Y,N,N,949,5689,1557,299,29,257,645,915,76,40,,,903,840,5.1500000000,13,2,44,4404,1604,209,597,1047,97,173,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3646950,100,99,BAL,BAL,BAL +1996,AL,BOS,BOS,E,3,162,81,85,77,N,N,N,N,928,5756,1631,308,31,209,642,1020,91,44,,,921,810,5.0000000000,17,5,37,4374,1606,185,722,1165,135,152,0.97,Boston Red Sox,Fenway Park II,2315231,101,101,BOS,BOS,BOS +1996,AL,CAL,ANA,W,4,161,81,70,91,N,N,N,N,762,5686,1571,256,24,192,527,974,53,39,,,943,849,5.3100000000,12,8,38,4317,1546,219,662,1052,128,156,0.97,California Angels,Anaheim Stadium,1820521,98,98,CAL,CAL,CAL +1996,AL,CHA,CHW,C,2,162,81,85,77,N,N,N,N,898,5644,1586,284,33,195,701,927,105,41,,,794,735,4.5300000000,7,5,43,4383,1529,174,616,1039,109,145,0.98,Chicago White Sox,Comiskey Park II,1676403,95,95,CHW,CHA,CHA +1996,AL,CLE,CLE,C,1,161,80,99,62,Y,N,N,N,952,5681,1665,335,23,218,671,844,160,50,,,769,702,4.3500000000,13,9,46,4356,1530,173,484,1033,124,156,0.98,Cleveland Indians,Jacobs Field,3318174,99,98,CLE,CLE,CLE +1996,AL,DET,DET,E,5,162,81,53,109,N,N,N,N,783,5530,1413,257,21,204,546,1268,87,50,,,1103,1015,6.3800000000,10,4,22,4296,1699,241,784,957,135,157,0.97,Detroit Tigers,Tiger Stadium,1168610,100,102,DET,DET,DET +1996,AL,KCA,KCR,C,5,161,80,75,86,N,N,N,N,746,5542,1477,286,38,123,529,943,195,85,,,786,733,4.5500000000,17,8,35,4350,1563,176,460,926,111,184,0.98,Kansas City Royals,Kauffman Stadium,1435997,99,100,KCR,KCA,KCA +1996,AL,MIN,MIN,C,4,162,82,78,84,N,N,N,N,877,5673,1633,332,47,118,576,958,143,53,,,900,847,5.3000000000,13,5,31,4317,1561,233,581,959,94,142,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1437352,101,102,MIN,MIN,MIN +1996,AL,ML4,MIL,C,3,162,81,80,82,N,N,N,N,894,5662,1578,304,40,178,624,986,101,48,,,899,831,5.1700000000,6,5,42,4341,1570,213,635,846,134,180,0.97,Milwaukee Brewers,County Stadium,1327155,104,104,MIL,MIL,MIL +1996,AL,NYA,NYY,E,1,162,80,92,70,Y,N,Y,Y,871,5628,1621,293,28,162,632,909,96,46,,,787,744,4.6500000000,6,9,52,4320,1469,143,610,1139,91,146,0.98,New York Yankees,Yankee Stadium II,2250877,101,100,NYY,NYA,NYA +1996,AL,OAK,OAK,W,3,162,81,78,84,N,N,N,N,861,5630,1492,283,21,243,640,1114,58,35,,,900,841,5.2000000000,7,5,34,4368,1638,205,644,884,102,195,0.98,Oakland Athletics,Oakland Coliseum,1148380,101,102,OAK,OAK,OAK +1996,AL,SEA,SEA,W,2,161,81,85,76,N,N,N,N,993,5668,1625,343,19,245,670,1052,90,39,,,895,828,5.2100000000,4,4,34,4293,1562,216,605,1000,110,155,0.98,Seattle Mariners,Kingdome,2723850,100,99,SEA,SEA,SEA +1996,AL,TEX,TEX,W,1,163,81,90,72,Y,N,N,N,928,5702,1622,323,32,221,660,1041,83,26,,,799,750,4.6600000000,19,6,43,4347,1569,168,582,976,87,150,0.98,Texas Rangers,The Ballpark at Arlington,2889020,105,105,TEX,TEX,TEX +1996,AL,TOR,TOR,E,4,162,81,74,88,N,N,N,N,766,5599,1451,302,35,177,529,1105,116,38,,,809,735,4.5800000000,19,7,35,4335,1476,187,610,1033,110,187,0.98,Toronto Blue Jays,Skydome,2559573,99,100,TOR,TOR,TOR +1996,NL,ATL,ATL,E,1,162,81,96,66,Y,N,Y,N,773,5614,1514,264,28,197,530,1032,83,43,,,648,578,3.5400000000,14,9,46,4407,1372,120,451,1245,130,143,0.98,Atlanta Braves,Atlanta-Fulton County Stadium,2901242,106,104,ATL,ATL,ATL +1996,NL,CHN,CHC,C,4,162,81,76,86,N,N,N,N,772,5531,1388,267,19,175,523,1090,108,50,,,771,705,4.3600000000,10,11,34,4368,1447,184,546,1027,104,147,0.98,Chicago Cubs,Wrigley Field,2219110,103,103,CHC,CHN,CHN +1996,NL,CIN,CIN,C,3,162,81,81,81,N,N,N,N,778,5455,1398,259,36,191,604,1134,171,63,,,773,694,4.3300000000,6,8,52,4329,1447,167,591,1089,121,145,0.98,Cincinnati Reds,Riverfront Stadium,1861428,101,101,CIN,CIN,CIN +1996,NL,COL,COL,W,3,162,81,83,79,N,N,N,N,961,5590,1607,297,37,221,527,1108,201,66,,,964,885,5.6000000000,5,5,34,4266,1597,198,624,932,149,167,0.97,Colorado Rockies,Coors Field,3891014,123,124,COL,COL,COL +1996,NL,FLO,FLA,E,3,162,81,80,82,N,N,N,N,688,5498,1413,240,30,150,553,1122,99,46,,,703,633,3.9500000000,8,13,41,4329,1386,113,598,1050,111,187,0.98,Florida Marlins,Joe Robbie Stadium,1746767,97,97,FLA,FLO,FLO +1996,NL,HOU,HOU,C,2,162,81,82,80,N,N,N,N,753,5508,1445,297,29,129,554,1057,180,63,,,792,704,4.3800000000,13,4,35,4341,1541,154,539,1163,138,130,0.97,Houston Astros,Astrodome,1975888,92,92,HOU,HOU,HOU +1996,NL,LAN,LAD,W,2,162,81,90,72,N,Y,N,N,703,5538,1396,215,33,150,516,1190,124,40,,,652,567,3.4800000000,6,9,50,4398,1378,125,534,1212,125,143,0.98,Los Angeles Dodgers,Dodger Stadium,3188454,93,92,LAD,LAN,LAN +1996,NL,MON,WSN,E,2,162,81,88,74,N,N,N,N,741,5505,1441,297,27,148,492,1077,108,34,,,668,605,3.7800000000,11,7,43,4324,1353,152,482,1206,126,121,0.98,Montreal Expos,Stade Olympique,1616709,102,102,MON,MON,MON +1996,NL,NYN,NYM,E,4,162,81,71,91,N,N,N,N,746,5618,1515,267,47,147,445,1069,97,48,,,779,675,4.2200000000,10,10,41,4320,1517,159,532,999,157,163,0.97,New York Mets,Shea Stadium,1588323,95,95,NYM,NYN,NYN +1996,NL,PHI,PHI,E,5,162,81,67,95,N,N,N,N,650,5499,1405,249,39,132,536,1092,117,41,,,790,710,4.4900000000,12,6,42,4269,1463,160,510,1044,115,145,0.98,Philadelphia Phillies,Veterans Stadium,1801677,100,101,PHI,PHI,PHI +1996,NL,PIT,PIT,C,5,162,80,73,89,N,N,N,N,776,5665,1509,319,33,138,510,989,126,49,,,833,750,4.6400000000,5,7,37,4360,1602,183,479,1044,128,144,0.98,Pittsburgh Pirates,Three Rivers Stadium,1332150,104,104,PIT,PIT,PIT +1996,NL,SDN,SDP,W,1,162,81,91,71,Y,N,N,N,771,5655,1499,285,24,147,601,1014,109,55,,,682,617,3.7300000000,5,11,47,4467,1395,138,506,1194,118,136,0.98,San Diego Padres,Jack Murphy Stadium,2187886,95,95,SDP,SDN,SDN +1996,NL,SFN,SFG,W,4,162,82,68,94,N,N,N,N,752,5533,1400,245,21,153,615,1189,113,53,,,862,756,4.7200000000,9,8,35,4326,1520,194,570,997,134,165,0.97,San Francisco Giants,Candlestick Park,1413922,95,96,SFG,SFN,SFN +1996,NL,SLN,STL,C,1,162,81,88,74,Y,N,N,N,759,5502,1468,281,31,142,495,1089,149,58,,,706,642,3.9800000000,13,11,43,4356,1380,173,539,1050,125,139,0.98,St. Louis Cardinals,Busch Stadium II,2654718,100,100,STL,SLN,SLN +1997,AL,ANA,ANA,W,2,162,82,84,78,N,N,N,N,829,5628,1531,279,25,161,617,953,126,72,,,794,730,4.5200000000,9,5,39,4362,1506,202,605,1050,126,140,0.98,Anaheim Angels,Edison International Field,1767330,102,102,ANA,ANA,ANA +1997,AL,BAL,BAL,E,1,162,81,98,64,Y,N,N,N,812,5584,1498,264,22,196,586,952,63,26,,,681,635,3.9100000000,8,10,59,4383,1404,164,563,1139,97,148,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3711132,97,96,BAL,BAL,BAL +1997,AL,BOS,BOS,E,4,162,81,78,84,N,N,N,N,851,5781,1684,373,32,185,514,1044,68,48,,,857,785,4.8700000000,7,4,40,4355,1567,149,610,987,136,179,0.97,Boston Red Sox,Fenway Park II,2226136,102,102,BOS,BOS,BOS +1997,AL,CHA,CHW,C,2,161,81,80,81,N,N,N,N,779,5491,1498,260,28,158,569,901,106,52,,,833,749,4.7400000000,6,7,52,4266,1505,175,575,961,125,131,0.97,Chicago White Sox,Comiskey Park II,1864782,96,96,CHW,CHA,CHA +1997,AL,CLE,CLE,C,1,161,81,86,75,Y,N,Y,N,868,5556,1589,301,22,220,617,955,118,59,,,815,749,4.7300000000,4,3,39,4275,1528,181,575,1036,108,159,0.98,Cleveland Indians,Jacobs Field,3404750,103,102,CLE,CLE,CLE +1997,AL,DET,DET,E,3,162,81,79,83,N,N,N,N,784,5481,1415,268,32,176,578,1164,161,72,,,790,732,4.5600000000,13,8,42,4335,1476,178,552,982,91,146,0.98,Detroit Tigers,Tiger Stadium,1365157,99,100,DET,DET,DET +1997,AL,KCA,KCR,C,5,161,80,67,94,N,N,N,N,747,5599,1478,256,35,158,561,1061,130,66,,,820,755,4.7100000000,11,5,29,4329,1530,186,531,961,88,168,0.98,Kansas City Royals,Kauffman Stadium,1517638,101,102,KCR,KCA,KCA +1997,AL,MIN,MIN,C,4,162,81,68,94,N,N,N,N,772,5634,1522,305,40,132,495,1121,151,52,,,861,800,5.0200000000,10,4,30,4302,1596,187,495,908,100,170,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1411064,101,101,MIN,MIN,MIN +1997,AL,ML4,MIL,C,3,161,80,78,83,N,N,N,N,681,5444,1415,294,27,135,494,967,103,55,,,742,670,4.2200000000,6,8,44,4282,1419,177,542,1012,125,171,0.98,Milwaukee Brewers,County Stadium,1444027,101,102,MIL,MIL,MIL +1997,AL,NYA,NYY,E,2,162,80,96,66,N,Y,N,N,891,5710,1636,325,23,161,676,954,99,58,,,688,626,3.8400000000,11,10,51,4401,1463,144,532,1165,105,156,0.98,New York Yankees,Yankee Stadium II,2580325,100,98,NYY,NYA,NYA +1997,AL,OAK,OAK,W,4,162,81,65,97,N,N,N,N,764,5589,1451,274,23,197,642,1181,71,36,,,946,881,5.4900000000,2,1,38,4335,1734,197,642,953,121,170,0.98,Oakland Athletics,Oakland Coliseum,1264218,96,97,OAK,OAK,OAK +1997,AL,SEA,SEA,W,1,162,81,90,72,Y,N,N,N,925,5614,1574,312,21,264,626,1110,89,40,,,833,770,4.7900000000,9,8,38,4341,1500,192,598,1207,123,143,0.98,Seattle Mariners,Kingdome,3192237,98,98,SEA,SEA,SEA +1997,AL,TEX,TEX,W,3,162,81,77,85,N,N,N,N,807,5651,1547,311,27,187,500,1116,72,37,,,823,744,4.6800000000,8,9,33,4289,1598,169,541,925,122,155,0.98,Texas Rangers,The Ballpark at Arlington,2945228,105,105,TEX,TEX,TEX +1997,AL,TOR,TOR,E,5,162,81,76,86,N,N,N,N,654,5473,1333,275,41,147,487,1138,134,50,,,694,628,3.9200000000,19,16,34,4326,1453,167,497,1150,97,150,0.98,Toronto Blue Jays,Skydome,2589297,99,99,TOR,TOR,TOR +1997,NL,ATL,ATL,E,1,162,81,101,61,Y,N,N,N,791,5528,1490,268,37,174,597,1160,108,58,,,581,518,3.1800000000,21,17,37,4395,1319,111,450,1196,114,136,0.98,Atlanta Braves,Turner Field,3464488,102,99,ATL,ATL,ATL +1997,NL,CHN,CHC,C,5,162,81,68,94,N,N,N,N,687,5489,1444,269,39,127,451,1003,116,60,,,759,705,4.4400000000,6,4,37,4287,1451,185,590,1072,115,117,0.98,Chicago Cubs,Wrigley Field,2190308,102,102,CHC,CHN,CHN +1997,NL,CIN,CIN,C,3,162,81,76,86,N,N,N,N,651,5484,1386,269,27,142,518,1113,190,67,,,764,712,4.4200000000,5,8,49,4347,1408,173,558,1159,106,129,0.98,Cincinnati Reds,Cinergy Field,1785788,102,102,CIN,CIN,CIN +1997,NL,COL,COL,W,3,162,81,83,79,N,N,N,N,923,5603,1611,269,40,239,562,1060,137,65,,,908,835,5.2500000000,9,5,38,4296,1697,196,566,870,111,202,0.98,Colorado Rockies,Coors Field,3888453,122,123,COL,COL,COL +1997,NL,FLO,FLA,E,2,162,81,92,70,N,Y,Y,Y,740,5439,1410,272,28,136,686,1074,115,58,,,669,615,3.8300000000,12,10,39,4338,1353,131,639,1188,119,167,0.98,Florida Marlins,Joe Robbie Stadium,2364387,95,96,FLA,FLO,FLO +1997,NL,HOU,HOU,C,1,162,81,84,78,Y,N,N,N,777,5502,1427,314,40,133,633,1085,171,74,,,660,595,3.6700000000,16,12,37,4377,1379,134,511,1138,131,169,0.97,Houston Astros,Astrodome,2046781,96,95,HOU,HOU,HOU +1997,NL,LAN,LAD,W,2,162,81,88,74,N,N,N,N,742,5544,1488,242,33,174,498,1079,131,64,,,645,588,3.6300000000,6,6,45,4377,1325,163,546,1232,116,104,0.98,Los Angeles Dodgers,Dodger Stadium,3319504,93,92,LAD,LAN,LAN +1997,NL,MON,WSN,E,4,162,81,78,84,N,N,N,N,691,5526,1423,339,34,172,420,1084,75,46,,,740,666,4.1400000000,27,14,37,4341,1365,149,557,1138,131,150,0.97,Montreal Expos,Stade Olympique,1497609,99,99,MON,MON,MON +1997,NL,NYN,NYM,E,3,162,81,88,74,N,N,N,N,777,5524,1448,274,28,153,550,1029,97,74,,,709,640,3.9500000000,7,8,49,4377,1452,160,504,982,117,165,0.98,New York Mets,Shea Stadium,1766174,97,97,NYM,NYN,NYN +1997,NL,PHI,PHI,E,5,162,81,68,94,N,N,N,N,668,5443,1390,290,35,116,519,1032,92,56,,,840,768,4.8700000000,13,7,35,4260,1441,171,616,1209,105,134,0.98,Philadelphia Phillies,Veterans Stadium,1490638,100,101,PHI,PHI,PHI +1997,NL,PIT,PIT,C,2,162,81,79,83,N,N,N,N,725,5503,1440,291,52,129,481,1161,160,50,,,760,683,4.2800000000,6,8,41,4308,1503,143,560,1080,131,149,0.97,Pittsburgh Pirates,Three Rivers Stadium,1657022,103,103,PIT,PIT,PIT +1997,NL,SDN,SDP,W,4,162,81,76,86,N,N,N,N,795,5609,1519,275,16,152,604,1129,140,60,,,891,804,4.9900000000,5,2,43,4350,1581,172,596,1059,125,132,0.98,San Diego Padres,Qualcomm Stadium,2089333,93,93,SDP,SDN,SDN +1997,NL,SFN,SFG,W,1,162,81,90,72,Y,N,N,N,784,5485,1415,266,37,172,642,1120,121,49,,,793,709,4.4100000000,5,9,45,4338,1494,160,578,1044,120,157,0.98,San Francisco Giants,3Com Park,1690869,98,98,SFG,SFN,SFN +1997,NL,SLN,STL,C,4,162,81,73,89,N,N,N,N,689,5524,1409,269,39,144,543,1191,164,60,,,708,631,3.9000000000,5,3,39,4367,1422,124,536,1130,123,156,0.98,St. Louis Cardinals,Busch Stadium II,2634014,99,99,STL,SLN,SLN +1998,AL,ANA,ANA,W,2,162,81,85,77,N,N,N,N,787,5630,1530,314,27,147,510,1028,93,45,,,783,720,4.4900000000,3,5,52,4332,1481,164,630,1091,106,146,0.98,Anaheim Angels,Edison International Field,2519280,102,102,ANA,ANA,ANA +1998,AL,BAL,BAL,E,4,162,81,79,83,N,N,N,N,817,5565,1520,303,11,214,593,903,86,48,,,785,752,4.7300000000,16,10,37,4293,1505,169,535,1065,81,144,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3684650,98,97,BAL,BAL,BAL +1998,AL,BOS,BOS,E,2,162,81,92,70,N,Y,N,N,876,5601,1568,338,35,205,541,1049,72,39,,,729,669,4.1900000000,5,8,53,4308,1406,168,504,1025,105,128,0.98,Boston Red Sox,Fenway Park II,2314704,102,101,BOS,BOS,BOS +1998,AL,CHA,CHW,C,2,163,81,80,82,N,N,N,N,861,5585,1516,291,38,198,551,916,127,46,,,931,837,5.2400000000,8,4,42,4315,1569,211,580,911,140,161,0.97,Chicago White Sox,Comiskey Park II,1391146,98,98,CHW,CHA,CHA +1998,AL,CLE,CLE,C,1,162,81,89,73,Y,N,N,N,850,5616,1530,334,30,198,630,1061,143,60,,,779,722,4.4500000000,9,4,47,4380,1552,171,563,1037,110,146,0.98,Cleveland Indians,Jacobs Field,3467299,103,102,CLE,CLE,CLE +1998,AL,DET,DET,C,5,162,81,65,97,N,N,N,N,722,5664,1494,306,29,165,455,1070,122,62,,,863,792,4.9300000000,9,4,32,4338,1551,185,595,947,115,164,0.98,Detroit Tigers,Tiger Stadium,1409391,100,101,DET,DET,DET +1998,AL,KCA,KCR,C,3,161,80,72,89,N,N,N,N,714,5546,1459,274,40,134,475,984,135,50,,,899,823,5.1600000000,6,7,46,4308,1590,196,568,999,125,172,0.98,Kansas City Royals,Kauffman Stadium,1494875,101,102,KCR,KCA,KCA +1998,AL,MIN,MIN,C,4,162,81,70,92,N,N,N,N,734,5641,1499,285,32,115,506,915,112,54,,,818,765,4.7600000000,7,9,42,4342,1622,180,457,952,108,135,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1165976,101,102,MIN,MIN,MIN +1998,AL,NYA,NYY,E,1,162,81,114,48,Y,N,Y,Y,965,5643,1625,290,31,207,653,1025,153,63,,,656,618,3.8200000000,22,16,48,4369,1357,156,466,1080,98,146,0.98,New York Yankees,Yankee Stadium II,2955193,97,95,NYY,NYA,NYA +1998,AL,OAK,OAK,W,4,162,81,74,88,N,N,N,N,804,5490,1413,295,13,149,633,1122,131,47,,,866,770,4.8300000000,12,4,39,4302,1555,179,529,922,141,155,0.97,Oakland Athletics,Oakland Coliseum,1232343,96,97,OAK,OAK,OAK +1998,AL,SEA,SEA,W,3,161,81,76,85,N,N,N,N,859,5628,1553,321,28,234,558,1081,115,39,,,855,783,4.9500000000,17,7,31,4272,1530,196,528,1156,125,139,0.97,Seattle Mariners,Kingdome,2651511,99,99,SEA,SEA,SEA +1998,AL,TBA,TBD,E,5,162,81,63,99,N,N,N,N,620,5555,1450,267,43,111,473,1107,120,73,,,751,697,4.3500000000,7,8,28,4329,1425,171,643,1008,94,178,0.98,Tampa Bay Devil Rays,Tropicana Field,2506293,101,102,TBD,TBA,TBA +1998,AL,TEX,TEX,W,1,162,81,88,74,Y,N,N,N,940,5672,1637,314,32,201,595,1045,82,47,,,871,795,5.0000000000,10,8,46,4293,1624,164,519,994,122,140,0.98,Texas Rangers,The Ballpark at Arlington,2927399,104,103,TEX,TEX,TEX +1998,AL,TOR,TOR,E,3,163,81,88,74,N,N,N,N,816,5580,1482,316,19,221,564,1132,184,81,,,768,698,4.2900000000,10,11,47,4395,1443,169,587,1154,125,131,0.97,Toronto Blue Jays,Skydome,2454303,100,99,TOR,TOR,TOR +1998,NL,ARI,ARI,W,5,162,81,65,97,N,N,N,N,665,5491,1353,235,46,159,489,1239,73,38,,,812,738,4.6400000000,7,6,37,4296,1463,188,489,908,100,125,0.98,Arizona Diamondbacks,Bank One Ballpark,3610290,100,99,ARI,ARI,ARI +1998,NL,ATL,ATL,E,1,162,81,106,56,Y,N,N,N,826,5484,1489,297,26,215,548,1062,98,43,,,581,519,3.2500000000,24,23,45,4315,1291,117,467,1232,91,139,0.98,Atlanta Braves,Turner Field,3360860,100,98,ATL,ATL,ATL +1998,NL,CHN,CHC,C,2,163,82,90,73,N,Y,N,N,831,5649,1494,250,34,212,601,1223,65,44,,,792,739,4.5000000000,7,7,56,4431,1528,180,575,1207,101,107,0.98,Chicago Cubs,Wrigley Field,2623194,103,103,CHC,CHN,CHN +1998,NL,CIN,CIN,C,4,162,81,77,85,N,N,N,N,750,5496,1441,298,28,138,608,1107,95,42,,,760,711,4.4400000000,6,8,42,4323,1400,170,573,1098,122,142,0.98,Cincinnati Reds,Cinergy Field,1793649,102,102,CIN,CIN,CIN +1998,NL,COL,COL,W,4,162,81,77,85,N,N,N,N,826,5632,1640,333,36,183,469,949,67,47,,,855,796,5.0000000000,9,5,36,4297,1583,174,562,951,102,193,0.98,Colorado Rockies,Coors Field,3792683,121,122,COL,COL,COL +1998,NL,FLO,FLA,E,5,162,81,54,108,N,N,N,N,667,5558,1381,277,36,114,525,1120,115,57,,,923,837,5.2000000000,11,3,24,4348,1617,182,715,1016,129,177,0.97,Florida Marlins,Joe Robbie Stadium,1730384,94,95,FLA,FLO,FLO +1998,NL,HOU,HOU,C,1,162,81,102,60,Y,N,N,N,874,5641,1578,326,28,166,621,1122,155,51,,,620,572,3.5000000000,12,11,44,4413,1435,147,465,1187,108,144,0.98,Houston Astros,Astrodome,2458451,98,97,HOU,HOU,HOU +1998,NL,LAN,LAD,W,3,162,81,83,79,N,N,N,N,669,5459,1374,209,27,159,447,1056,137,53,,,678,613,3.8100000000,16,10,47,4341,1332,135,587,1178,134,154,0.97,Los Angeles Dodgers,Dodger Stadium,3089222,95,95,LAD,LAN,LAN +1998,NL,MIL,MIL,C,5,162,81,74,88,N,N,N,N,707,5541,1439,266,17,152,532,1039,81,59,,,812,746,4.6300000000,2,2,39,4353,1538,188,550,1063,110,192,0.98,Milwaukee Brewers,County Stadium,1811593,100,101,MIL,ML4,MIL +1998,NL,MON,WSN,E,4,162,81,65,97,N,N,N,N,644,5418,1348,280,32,147,439,1058,91,46,,,783,696,4.3900000000,4,5,39,4281,1448,156,533,1017,155,127,0.97,Montreal Expos,Stade Olympique,914909,98,99,MON,MON,MON +1998,NL,NYN,NYM,E,2,162,81,88,74,N,N,N,N,706,5510,1425,289,24,136,572,1049,62,46,,,645,611,3.7700000000,9,16,46,4374,1381,152,532,1129,101,151,0.98,New York Mets,Shea Stadium,2287948,99,99,NYM,NYN,NYN +1998,NL,PHI,PHI,E,3,162,81,75,87,N,N,N,N,713,5617,1482,286,36,126,508,1080,97,45,,,808,754,4.6400000000,21,11,32,4389,1476,188,544,1176,110,131,0.98,Philadelphia Phillies,Veterans Stadium,1715722,102,103,PHI,PHI,PHI +1998,NL,PIT,PIT,C,6,163,80,69,93,N,N,N,N,650,5493,1395,271,35,107,393,1060,159,51,,,718,630,3.9100000000,7,10,41,4347,1433,147,530,1112,140,161,0.97,Pittsburgh Pirates,Three Rivers Stadium,1560950,102,103,PIT,PIT,PIT +1998,NL,SDN,SDP,W,1,162,81,98,64,Y,N,Y,N,749,5490,1390,292,30,167,604,1072,79,37,,,635,587,3.6300000000,14,11,59,4363,1384,139,501,1217,104,155,0.98,San Diego Padres,Qualcomm Stadium,2555874,92,92,SDP,SDN,SDN +1998,NL,SFN,SFG,W,2,163,81,89,74,N,N,N,N,845,5628,1540,292,26,161,678,1040,102,51,,,739,688,4.1900000000,6,6,44,4431,1457,171,562,1089,101,157,0.98,San Francisco Giants,3Com Park,1925364,95,95,SFG,SFN,SFN +1998,NL,SLN,STL,C,3,163,82,83,79,N,N,N,N,810,5593,1444,292,30,223,676,1179,133,41,,,782,705,4.3200000000,6,10,44,4409,1513,151,558,972,142,160,0.97,St. Louis Cardinals,Busch Stadium II,3195691,100,100,STL,SLN,SLN +1999,AL,ANA,ANA,W,4,162,81,70,92,N,N,N,N,711,5494,1404,248,22,158,511,1022,71,45,,,826,762,4.7900000000,4,7,37,4293,1472,177,624,877,106,156,0.98,Anaheim Angels,Edison International Field,2253123,99,100,ANA,ANA,ANA +1999,AL,BAL,BAL,E,4,162,81,78,84,N,N,N,N,851,5637,1572,299,21,203,615,890,107,46,,,815,761,4.7700000000,17,11,33,4305,1468,198,647,982,89,192,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3433150,96,96,BAL,BAL,BAL +1999,AL,BOS,BOS,E,2,162,81,94,68,N,Y,N,N,836,5579,1551,334,42,176,597,928,67,39,,,718,638,4.0000000000,6,12,50,4309,1396,160,469,1131,127,131,0.97,Boston Red Sox,Fenway Park II,2446162,104,103,BOS,BOS,BOS +1999,AL,CHA,CHW,C,2,162,81,75,86,N,N,N,N,777,5644,1563,298,37,162,499,810,110,50,,,870,786,4.9200000000,6,3,39,4314,1608,210,596,968,136,148,0.97,Chicago White Sox,Comiskey Park II,1338851,101,101,CHW,CHA,CHA +1999,AL,CLE,CLE,C,1,162,81,97,65,Y,N,N,N,1009,5634,1629,309,32,209,743,1099,147,50,,,860,789,4.9000000000,3,6,46,4350,1503,197,634,1120,106,153,0.98,Cleveland Indians,Jacobs Field,3468456,104,103,CLE,CLE,CLE +1999,AL,DET,DET,C,3,161,81,69,92,N,N,N,N,747,5481,1433,289,34,212,458,1049,108,70,,,882,817,5.1800000000,4,6,33,4261,1528,209,583,976,106,155,0.98,Detroit Tigers,Tiger Stadium,2026441,99,101,DET,DET,DET +1999,AL,KCA,KCR,C,4,161,80,64,97,N,N,N,N,856,5624,1584,294,52,151,535,932,127,39,,,921,844,5.3500000000,11,3,29,4261,1607,202,643,831,125,189,0.98,Kansas City Royals,Kauffman Stadium,1506068,102,103,KCR,KCA,KCA +1999,AL,MIN,MIN,C,5,161,81,63,97,N,N,N,N,686,5495,1450,285,30,105,500,978,118,60,,,845,794,5.0200000000,12,8,34,4269,1591,208,487,927,92,144,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1202829,103,104,MIN,MIN,MIN +1999,AL,NYA,NYY,E,1,162,81,98,64,Y,N,Y,Y,900,5568,1568,302,36,193,718,978,104,57,,,731,660,4.1300000000,6,10,50,4318,1402,158,581,1111,111,130,0.98,New York Yankees,Yankee Stadium II,3292736,98,97,NYY,NYA,NYA +1999,AL,OAK,OAK,W,2,162,81,87,75,N,N,N,N,893,5519,1430,287,20,235,770,1129,70,37,,,846,749,4.6900000000,6,5,48,4314,1537,160,569,967,122,162,0.98,Oakland Athletics,Oakland Coliseum,1434610,94,94,OAK,OAK,OAK +1999,AL,SEA,SEA,W,3,162,81,79,83,N,N,N,N,859,5572,1499,263,21,244,610,1095,130,45,,,905,834,5.2400000000,7,6,40,4300,1613,191,684,980,113,180,0.98,Seattle Mariners,Kingdome / Safeco Field,2916346,102,103,SEA,SEA,SEA +1999,AL,TBA,TBD,E,5,162,81,69,93,N,N,N,N,772,5586,1531,272,29,145,544,1042,73,49,,,913,805,5.0600000000,6,5,45,4297,1606,172,695,1055,135,198,0.97,Tampa Bay Devil Rays,Tropicana Field,1562827,100,102,TBD,TBA,TBA +1999,AL,TEX,TEX,W,1,162,81,95,67,Y,N,N,N,945,5651,1653,304,29,230,611,937,111,54,,,859,809,5.0700000000,6,9,47,4306,1626,186,509,979,119,167,0.98,Texas Rangers,The Ballpark at Arlington,2771469,105,105,TEX,TEX,TEX +1999,AL,TOR,TOR,E,3,162,81,84,78,N,N,N,N,883,5642,1580,337,14,212,578,1077,119,48,,,862,786,4.9200000000,14,9,39,4315,1582,191,575,1009,106,164,0.98,Toronto Blue Jays,Skydome,2163464,101,101,TOR,TOR,TOR +1999,NL,ARI,ARI,W,1,162,81,100,62,Y,N,N,N,908,5658,1566,289,46,216,588,1045,137,39,,,676,615,3.7700000000,16,9,42,4401,1387,176,543,1198,104,129,0.98,Arizona Diamondbacks,Bank One Ballpark,3019654,101,101,ARI,ARI,ARI +1999,NL,ATL,ATL,E,1,162,81,103,59,Y,N,Y,N,840,5569,1481,309,23,197,608,962,148,66,,,661,593,3.6300000000,9,9,45,4413,1398,142,507,1197,111,122,0.98,Atlanta Braves,Turner Field,3284897,100,98,ATL,ATL,ATL +1999,NL,CHN,CHC,C,6,162,81,67,95,N,N,N,N,747,5482,1411,255,35,189,571,1170,60,44,,,920,837,5.2700000000,11,6,32,4291,1619,221,529,980,139,135,0.97,Chicago Cubs,Wrigley Field,2813854,97,98,CHC,CHN,CHN +1999,NL,CIN,CIN,C,2,163,82,96,67,N,N,N,N,865,5649,1536,312,37,209,569,1125,164,54,,,711,648,3.9900000000,6,11,55,4384,1309,190,636,1081,105,137,0.98,Cincinnati Reds,Cinergy Field,2061222,103,103,CIN,CIN,CIN +1999,NL,COL,COL,W,5,162,81,72,90,N,N,N,N,906,5716,1644,305,39,223,508,863,70,43,,,1028,955,6.0200000000,12,2,33,4285,1700,237,737,1032,118,186,0.98,Colorado Rockies,Coors Field,3481065,127,127,COL,COL,COL +1999,NL,FLO,FLA,E,5,162,80,64,98,N,N,N,N,691,5578,1465,266,44,128,479,1145,92,46,,,852,781,4.9000000000,6,5,33,4306,1560,171,655,943,127,150,0.97,Florida Marlins,Pro Player Stadium,1369421,93,95,FLA,FLO,FLO +1999,NL,HOU,HOU,C,1,162,82,97,65,Y,N,N,N,823,5485,1463,293,23,168,728,1138,166,75,,,675,622,3.8400000000,12,8,48,4375,1485,128,478,1204,106,168,0.98,Houston Astros,Astrodome,2706017,100,98,HOU,HOU,HOU +1999,NL,LAN,LAD,W,3,162,81,77,85,N,N,N,N,793,5567,1480,253,23,187,594,1030,167,68,,,787,718,4.4500000000,8,6,37,4357,1438,192,594,1077,137,134,0.97,Los Angeles Dodgers,Dodger Stadium,3095346,95,94,LAD,LAN,LAN +1999,NL,MIL,MIL,C,5,161,80,74,87,N,N,N,N,815,5582,1524,299,30,165,658,1065,81,33,,,886,812,5.0700000000,2,5,40,4327,1618,213,616,987,127,142,0.97,Milwaukee Brewers,County Stadium,1701796,99,99,MIL,ML4,MIL +1999,NL,MON,WSN,E,4,162,81,68,94,N,N,N,N,718,5559,1473,320,47,163,438,939,70,51,,,853,747,4.6900000000,6,4,44,4302,1505,152,572,1043,160,126,0.97,Montreal Expos,Stade Olympique,773277,97,98,MON,MON,MON +1999,NL,NYN,NYM,E,2,163,81,97,66,N,Y,N,N,853,5572,1553,297,14,181,717,994,150,61,,,711,691,4.2700000000,5,7,49,4369,1372,167,617,1172,68,147,0.98,New York Mets,Shea Stadium,2725668,98,97,NYM,NYN,NYN +1999,NL,PHI,PHI,E,3,162,81,77,85,N,N,N,N,841,5598,1539,302,44,161,631,1081,125,35,,,846,788,4.9300000000,11,6,32,4314,1494,212,627,1030,100,143,0.98,Philadelphia Phillies,Veterans Stadium,1825337,105,105,PHI,PHI,PHI +1999,NL,PIT,PIT,C,3,161,81,78,83,N,N,N,N,775,5468,1417,282,40,171,573,1197,112,44,,,782,689,4.3300000000,8,3,34,4297,1444,160,633,1083,147,174,0.97,Pittsburgh Pirates,Three Rivers Stadium,1638023,101,101,PIT,PIT,PIT +1999,NL,SDN,SDP,W,4,162,81,74,88,N,N,N,N,710,5394,1360,256,22,153,631,1169,174,67,,,781,705,4.4700000000,5,6,43,4260,1454,193,529,1078,129,151,0.97,San Diego Padres,Qualcomm Stadium,2523538,92,92,SDP,SDN,SDN +1999,NL,SFN,SFG,W,2,162,81,86,76,N,N,N,N,872,5563,1507,307,18,188,696,1028,109,56,,,831,762,4.7100000000,6,3,42,4368,1486,194,655,1076,105,150,0.98,San Francisco Giants,3Com Park,2078399,95,94,SFG,SFN,SFN +1999,NL,SLN,STL,C,4,161,80,75,86,N,N,N,N,809,5570,1461,274,27,194,613,1202,134,48,,,838,761,4.7400000000,5,3,38,4335,1519,161,667,1025,132,161,0.97,St. Louis Cardinals,Busch Stadium II,3225334,101,101,STL,SLN,SLN +2000,AL,ANA,ANA,W,3,162,81,82,80,N,N,N,N,864,5628,1574,309,34,236,608,1024,93,52,47,43,869,805,5.0000000000,5,3,46,4344,1534,228,662,846,134,184,0.97,Anaheim Angels,Edison International Field,2066982,102,103,ANA,ANA,ANA +2000,AL,BAL,BAL,E,4,162,81,74,88,N,N,N,N,794,5549,1508,310,22,184,558,900,126,65,49,54,913,855,5.3700000000,14,6,33,4299,1547,202,665,1017,116,151,0.98,Baltimore Orioles,Oriole Park at Camden Yards,3297031,95,96,BAL,BAL,BAL +2000,AL,BOS,BOS,E,2,162,81,85,77,N,N,N,N,792,5630,1503,316,32,167,611,1019,43,30,42,48,745,683,4.2300000000,7,12,46,4357,1433,173,499,1121,109,120,0.98,Boston Red Sox,Fenway Park II,2585895,104,103,BOS,BOS,BOS +2000,AL,CHA,CHW,C,1,162,81,95,67,Y,N,N,N,978,5646,1615,325,33,216,591,960,119,42,53,61,839,751,4.6600000000,5,7,43,4350,1509,195,614,1037,133,190,0.97,Chicago White Sox,Comiskey Park II,1947799,102,102,CHW,CHA,CHA +2000,AL,CLE,CLE,C,2,162,81,90,72,N,N,N,N,950,5683,1639,310,30,221,685,1057,113,34,51,52,816,775,4.8400000000,6,5,34,4326,1511,173,666,1213,72,149,0.98,Cleveland Indians,Jacobs Field,3456278,101,100,CLE,CLE,CLE +2000,AL,DET,DET,C,3,162,81,79,83,N,N,N,N,823,5644,1553,307,41,177,562,982,83,38,43,49,827,755,4.7100000000,6,6,44,4329,1583,177,496,978,105,171,0.98,Detroit Tigers,Comerica Park,2438617,95,95,DET,DET,DET +2000,AL,KCA,KCR,C,4,162,81,77,85,N,N,N,N,879,5709,1644,281,27,150,511,840,121,35,48,70,930,876,5.4800000000,10,6,29,4317,1585,239,693,927,102,185,0.98,Kansas City Royals,Kauffman Stadium,1564847,103,103,KCR,KCA,KCA +2000,AL,MIN,MIN,C,5,162,81,69,93,N,N,N,N,748,5615,1516,325,49,116,556,1021,90,45,35,51,880,819,5.1500000000,6,4,35,4297,1634,212,516,1042,102,155,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1000760,104,105,MIN,MIN,MIN +2000,AL,NYA,NYY,E,1,161,80,87,74,Y,N,Y,Y,871,5556,1541,294,25,205,631,1007,99,48,57,50,814,753,4.7600000000,9,6,40,4272,1458,177,577,1040,109,135,0.98,New York Yankees,Yankee Stadium II,3055435,99,98,NYY,NYA,NYA +2000,AL,OAK,OAK,W,1,161,81,91,70,Y,N,N,N,947,5560,1501,281,23,239,750,1159,40,15,52,44,813,730,4.5800000000,7,11,43,4305,1535,158,615,963,134,164,0.97,Oakland Athletics,Oakland Coliseum,1603744,96,95,OAK,OAK,OAK +2000,AL,SEA,SEA,W,2,162,81,91,71,N,Y,N,N,907,5497,1481,300,26,198,775,1073,122,56,48,61,780,720,4.5000000000,4,10,44,4324,1442,167,634,998,99,178,0.98,Seattle Mariners,Safeco Field,2914624,95,93,SEA,SEA,SEA +2000,AL,TBA,TBD,E,5,161,80,69,92,N,N,N,N,733,5505,1414,253,22,162,559,1022,90,46,48,40,842,773,4.8600000000,10,8,38,4293,1553,198,533,955,118,171,0.98,Tampa Bay Devil Rays,Tropicana Field,1449673,99,100,TBD,TBA,TBA +2000,AL,TEX,TEX,W,4,162,81,71,91,N,N,N,N,848,5648,1601,330,35,173,580,922,69,47,39,48,974,876,5.5200000000,3,4,39,4287,1683,202,661,918,135,162,0.97,Texas Rangers,The Ballpark at Arlington,2588401,102,102,TEX,TEX,TEX +2000,AL,TOR,TOR,E,3,162,81,83,79,N,N,N,N,861,5677,1562,328,21,244,526,1026,89,34,60,34,908,821,5.1400000000,15,4,37,4311,1615,195,560,978,100,176,0.98,Toronto Blue Jays,Skydome,1705712,103,103,TOR,TOR,TOR +2000,NL,ARI,ARI,W,3,162,81,85,77,N,N,N,N,792,5527,1466,282,44,179,535,975,97,44,59,58,754,698,4.3500000000,16,8,38,4330,1441,190,500,1220,107,138,0.98,Arizona Diamondbacks,Bank One Ballpark,2942251,105,103,ARI,ARI,ARI +2000,NL,ATL,ATL,E,1,162,81,95,67,Y,N,N,N,810,5489,1490,274,26,179,595,1010,148,56,59,45,714,648,4.0500000000,13,9,53,4320,1428,165,484,1093,129,138,0.97,Atlanta Braves,Turner Field,3234304,101,99,ATL,ATL,ATL +2000,NL,CHN,CHC,C,6,162,81,65,97,N,N,N,N,764,5577,1426,272,23,183,632,1120,93,37,54,45,904,849,5.2500000000,10,5,39,4363,1505,231,658,1143,100,139,0.98,Chicago Cubs,Wrigley Field,2789511,97,98,CHC,CHN,CHN +2000,NL,CIN,CIN,C,2,163,82,85,77,N,N,N,N,825,5635,1545,302,36,200,559,995,100,38,64,58,765,700,4.3300000000,8,7,42,4368,1446,190,659,1015,111,156,0.98,Cincinnati Reds,Cinergy Field,2577371,102,102,CIN,CIN,CIN +2000,NL,COL,COL,W,4,162,81,82,80,N,N,N,N,968,5660,1664,320,53,161,601,907,131,61,42,75,897,835,5.2600000000,7,2,33,4290,1568,221,588,1001,94,176,0.98,Colorado Rockies,Coors Field,3295129,125,125,COL,COL,COL +2000,NL,FLO,FLA,E,3,161,81,79,82,N,N,N,N,731,5509,1441,274,29,160,540,1184,168,55,60,51,797,729,4.5900000000,5,4,48,4288,1477,169,650,1051,125,144,0.98,Florida Marlins,Pro Player Stadium,1218326,94,95,FLA,FLO,FLO +2000,NL,HOU,HOU,C,4,162,81,72,90,N,N,N,N,938,5570,1547,289,36,249,673,1129,114,52,83,61,944,864,5.4100000000,8,2,30,4312,1596,234,598,1064,133,149,0.97,Houston Astros,Enron Field,3056139,107,107,HOU,HOU,HOU +2000,NL,LAN,LAD,W,2,162,81,86,76,N,N,N,N,798,5481,1408,265,28,211,668,1083,95,42,51,46,729,659,4.1000000000,9,11,36,4335,1379,176,600,1154,135,151,0.97,Los Angeles Dodgers,Dodger Stadium,2880242,94,94,LAD,LAN,LAN +2000,NL,MIL,MIL,C,3,163,81,73,89,N,N,N,N,740,5563,1366,297,25,177,620,1245,72,44,61,49,826,755,4.6400000000,2,7,29,4398,1501,174,728,967,118,187,0.98,Milwaukee Brewers,County Stadium,1573621,97,98,MIL,ML4,MIL +2000,NL,MON,WSN,E,4,162,81,67,95,N,N,N,N,738,5535,1475,310,35,178,476,1048,58,48,29,34,902,812,5.1300000000,4,7,39,4273,1575,181,579,1011,132,151,0.97,Montreal Expos,Stade Olympique,926272,103,104,MON,MON,MON +2000,NL,NYN,NYM,E,2,162,81,94,68,N,Y,Y,N,807,5486,1445,282,20,198,675,1037,66,46,45,51,738,670,4.1600000000,8,10,49,4350,1398,164,574,1164,118,121,0.98,New York Mets,Shea Stadium,2820530,96,96,NYM,NYN,NYN +2000,NL,PHI,PHI,E,5,162,81,65,97,N,N,N,N,708,5511,1386,304,40,144,611,1117,102,30,44,37,830,763,4.7700000000,8,6,34,4315,1458,201,640,1123,100,136,0.98,Philadelphia Phillies,Veterans Stadium,1612769,100,101,PHI,PHI,PHI +2000,NL,PIT,PIT,C,5,162,81,69,93,N,N,N,N,793,5643,1506,320,31,168,564,1032,86,40,66,37,888,794,4.9300000000,5,7,27,4347,1554,163,711,1070,132,169,0.97,Pittsburgh Pirates,Three Rivers Stadium,1748908,99,100,PIT,PIT,PIT +2000,NL,SDN,SDP,W,5,162,81,76,86,N,N,N,N,752,5560,1413,279,37,157,602,1177,131,53,46,43,815,733,4.5200000000,5,5,46,4377,1443,191,649,1071,141,155,0.97,San Diego Padres,Qualcomm Stadium,2352443,92,92,SDP,SDN,SDN +2000,NL,SFN,SFG,W,1,162,81,97,65,Y,N,N,N,925,5519,1535,304,44,226,709,1032,79,39,51,66,747,675,4.2100000000,9,15,47,4332,1452,151,623,1076,93,173,0.98,San Francisco Giants,PacBell Park,3318800,93,92,SFG,SFN,SFN +2000,NL,SLN,STL,C,1,162,81,95,67,Y,N,N,N,887,5478,1481,259,25,235,675,1253,87,51,84,53,771,698,4.3800000000,10,7,37,4300,1403,196,606,1100,111,148,0.98,St. Louis Cardinals,Busch Stadium II,3336493,102,101,STL,SLN,SLN +2001,AL,ANA,ANA,W,3,162,81,75,87,N,N,N,N,691,5551,1447,275,26,158,494,1001,116,52,77,53,730,671,4.2000000000,6,1,43,4313,1452,168,525,947,103,142,0.98,Anaheim Angels,Edison International Field,2000919,101,101,ANA,ANA,ANA +2001,AL,BAL,BAL,E,4,162,80,63,98,N,N,N,N,687,5472,1359,262,24,136,514,989,133,53,77,49,829,744,4.6700000000,10,6,31,4297,1504,194,528,938,125,137,0.97,Baltimore Orioles,Oriole Park at Camden Yards,3094841,95,96,BAL,BAL,BAL +2001,AL,BOS,BOS,E,2,161,81,82,79,N,N,N,N,772,5605,1493,316,29,198,520,1131,46,35,70,41,745,667,4.1500000000,3,9,48,4344,1412,146,544,1259,113,129,0.98,Boston Red Sox,Fenway Park II,2625333,102,101,BOS,BOS,BOS +2001,AL,CHA,CHW,C,3,162,81,83,79,N,N,N,N,798,5464,1463,300,29,214,520,998,123,59,52,51,795,725,4.5500000000,8,7,51,4300,1465,181,500,921,118,149,0.98,Chicago White Sox,Comiskey Park II,1766172,104,103,CHW,CHA,CHA +2001,AL,CLE,CLE,C,1,162,80,91,71,Y,N,N,N,897,5600,1559,294,37,212,577,1076,79,41,69,62,821,746,4.6400000000,3,4,42,4340,1512,148,573,1218,107,137,0.98,Cleveland Indians,Jacobs Field,3175523,100,100,CLE,CLE,CLE +2001,AL,DET,DET,C,4,162,81,66,96,N,N,N,N,724,5537,1439,291,60,139,466,972,133,61,51,49,876,795,5.0100000000,16,2,34,4288,1624,180,553,859,131,165,0.97,Detroit Tigers,Comerica Park,1921305,93,95,DET,DET,DET +2001,AL,KCA,KCR,C,5,162,81,65,97,N,N,N,N,729,5643,1503,277,37,152,406,898,100,42,44,47,858,779,4.8700000000,5,1,30,4320,1537,209,576,911,117,204,0.98,Kansas City Royals,Kauffman Stadium,1536371,107,108,KCR,KCA,KCA +2001,AL,MIN,MIN,C,2,162,81,85,77,N,N,N,N,771,5560,1514,328,38,164,495,1083,146,67,64,38,766,722,4.5100000000,12,8,45,4324,1494,192,445,965,108,121,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1782929,102,102,MIN,MIN,MIN +2001,AL,NYA,NYY,E,1,161,80,95,65,Y,N,Y,N,804,5577,1488,289,20,203,519,1035,161,53,64,43,713,649,4.0200000000,7,9,57,4354,1429,158,465,1266,109,132,0.98,New York Yankees,Yankee Stadium II,3264907,102,100,NYY,NYA,NYA +2001,AL,OAK,OAK,W,2,162,81,102,60,N,Y,N,N,884,5573,1469,334,22,199,640,1021,68,29,88,59,645,583,3.5900000000,13,9,44,4390,1384,153,440,1117,125,151,0.98,Oakland Athletics,Oakland Coliseum,2133277,99,97,OAK,OAK,OAK +2001,AL,SEA,SEA,W,1,162,81,116,46,Y,N,N,N,927,5680,1637,310,38,169,614,989,174,42,62,70,627,576,3.5400000000,8,14,56,4395,1293,160,465,1051,83,137,0.98,Seattle Mariners,Safeco Field,3507326,94,93,SEA,SEA,SEA +2001,AL,TBA,TBD,E,5,162,81,62,100,N,N,N,N,672,5524,1426,311,21,121,456,1116,115,52,54,25,887,781,4.9400000000,1,6,30,4271,1513,207,569,1030,139,144,0.97,Tampa Bay Devil Rays,Tropicana Field,1298365,98,100,TBD,TBA,TBA +2001,AL,TEX,TEX,W,4,162,82,73,89,N,N,N,N,890,5685,1566,326,23,246,548,1093,97,32,75,55,968,913,5.7100000000,4,3,37,4315,1670,222,596,951,114,167,0.98,Texas Rangers,The Ballpark at Arlington,2831021,104,105,TEX,TEX,TEX +2001,AL,TOR,TOR,E,3,162,82,80,82,N,N,N,N,767,5663,1489,287,36,195,470,1094,156,55,74,43,753,696,4.2800000000,7,10,41,4388,1553,165,490,1041,97,184,0.98,Toronto Blue Jays,Skydome,1915438,102,103,TOR,TOR,TOR +2001,NL,ARI,ARI,W,1,162,81,92,70,Y,N,Y,Y,818,5595,1494,284,35,208,587,1052,71,38,57,36,677,627,3.8700000000,12,13,34,4379,1352,195,461,1297,84,148,0.98,Arizona Diamondbacks,Bank One Ballpark,2736451,108,107,ARI,ARI,ARI +2001,NL,ATL,ATL,E,1,162,81,88,74,Y,N,N,N,729,5498,1432,263,24,174,493,1039,85,46,45,52,643,578,3.5900000000,5,13,41,4342,1363,153,499,1133,103,133,0.98,Atlanta Braves,Turner Field,2823530,103,102,ATL,ATL,ATL +2001,NL,CHN,CHC,C,3,162,81,88,74,N,N,N,N,777,5406,1409,268,32,194,577,1077,67,36,66,53,701,643,4.0300000000,8,6,41,4311,1357,164,550,1344,109,113,0.98,Chicago Cubs,Wrigley Field,2779465,95,95,CHC,CHN,CHN +2001,NL,CIN,CIN,C,5,162,81,66,96,N,N,N,N,735,5583,1464,304,22,176,468,1172,103,54,65,40,850,765,4.7700000000,2,2,35,4328,1572,198,515,943,138,136,0.97,Cincinnati Reds,Cinergy Field,1879757,105,105,CIN,CIN,CIN +2001,NL,COL,COL,W,5,162,81,73,89,N,N,N,N,923,5690,1663,324,61,213,511,1027,132,54,61,50,906,841,5.2900000000,8,8,26,4290,1522,239,598,1058,96,167,0.98,Colorado Rockies,Coors Field,3166821,122,122,COL,COL,COL +2001,NL,FLO,FLA,E,4,162,80,76,86,N,N,N,N,742,5542,1461,325,30,166,470,1145,89,40,67,45,744,691,4.3200000000,5,11,32,4314,1397,151,617,1119,103,174,0.98,Florida Marlins,Pro Player Stadium,1261226,97,97,FLA,FLO,FLO +2001,NL,HOU,HOU,C,1,162,81,93,69,Y,N,N,N,847,5528,1500,313,29,208,581,1119,64,49,89,56,769,707,4.3700000000,7,6,48,4364,1453,221,486,1228,110,138,0.98,Houston Astros,Enron Field,2904277,107,106,HOU,HOU,HOU +2001,NL,LAN,LAD,W,3,162,81,86,76,N,N,N,N,758,5493,1399,264,27,206,519,1062,89,42,56,44,744,685,4.2500000000,3,5,46,4352,1387,184,524,1212,116,138,0.98,Los Angeles Dodgers,Dodger Stadium,3017143,92,91,LAD,LAN,LAN +2001,NL,MIL,MIL,C,4,162,81,68,94,N,N,N,N,740,5488,1378,273,30,209,488,1399,66,36,72,35,806,740,4.6400000000,3,8,28,4309,1452,197,667,1057,103,156,0.98,Milwaukee Brewers,Miller Park,2811041,98,99,MIL,ML4,MIL +2001,NL,MON,WSN,E,5,162,81,68,94,N,N,N,N,670,5379,1361,320,28,131,478,1071,101,51,60,45,812,745,4.6800000000,5,11,28,4294,1509,190,525,1103,108,139,0.98,Montreal Expos,Stade Olympique,642745,101,102,MON,MON,MON +2001,NL,NYN,NYM,E,3,162,81,82,80,N,N,N,N,642,5459,1361,273,18,147,545,1062,66,48,65,35,713,654,4.0700000000,6,14,48,4337,1418,186,438,1191,101,132,0.98,New York Mets,Shea Stadium,2658330,96,96,NYM,NYN,NYN +2001,NL,PHI,PHI,E,2,162,81,86,76,N,N,N,N,746,5497,1431,295,29,164,551,1125,153,47,43,61,719,667,4.1500000000,8,7,47,4336,1417,170,527,1086,91,145,0.98,Philadelphia Phillies,Veterans Stadium,1782054,98,98,PHI,PHI,PHI +2001,NL,PIT,PIT,C,6,162,81,62,100,N,N,N,N,657,5398,1333,256,25,161,467,1106,93,73,67,35,858,794,5.0500000000,8,9,36,4249,1493,167,549,908,133,168,0.97,Pittsburgh Pirates,PNC Park,2464870,103,105,PIT,PIT,PIT +2001,NL,SDN,SDP,W,4,162,81,79,83,N,N,N,N,789,5482,1379,273,26,161,678,1273,129,44,41,48,812,724,4.5200000000,5,6,46,4322,1519,219,476,1088,145,127,0.97,San Diego Padres,Qualcomm Stadium,2378128,91,92,SDP,SDN,SDN +2001,NL,SFN,SFG,W,2,162,81,90,72,N,N,N,N,799,5612,1493,304,40,235,625,1090,57,42,50,54,748,680,4.1800000000,3,8,47,4390,1437,145,579,1080,118,170,0.98,San Francisco Giants,PacBell Park,3311958,93,92,SFG,SFN,SFN +2001,NL,SLN,STL,C,2,162,82,93,69,N,Y,N,N,814,5450,1469,274,32,199,529,1089,91,35,65,50,684,627,3.9300000000,8,11,38,4306,1389,196,526,1083,110,156,0.98,St. Louis Cardinals,Busch Stadium II,3109578,100,99,STL,SLN,SLN +2002,AL,ANA,ANA,W,2,162,81,99,63,N,Y,Y,Y,851,5678,1603,333,32,152,462,805,117,51,74,64,644,595,3.6900000000,7,14,54,4357,1345,169,509,999,87,151,0.98,Anaheim Angels,Edison International Field,2305547,100,99,ANA,ANA,ANA +2002,AL,BAL,BAL,E,4,162,81,67,95,N,N,N,N,667,5491,1353,311,27,165,452,993,110,48,64,49,773,719,4.4600000000,8,3,31,4352,1491,208,549,967,91,173,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2682439,95,96,BAL,BAL,BAL +2002,AL,BOS,BOS,E,2,162,81,93,69,N,N,N,N,859,5640,1560,348,33,177,545,944,80,28,72,53,665,603,3.7500000000,5,17,51,4338,1339,146,430,1157,104,140,0.98,Boston Red Sox,Fenway Park II,2650862,103,102,BOS,BOS,BOS +2002,AL,CHA,CHW,C,2,162,81,81,81,N,N,N,N,856,5502,1475,289,29,217,555,952,75,31,49,53,798,716,4.5300000000,7,7,35,4269,1422,190,528,945,97,157,0.98,Chicago White Sox,Comiskey Park II,1676911,102,101,CHW,CHA,CHA +2002,AL,CLE,CLE,C,3,162,81,74,88,N,N,N,N,739,5423,1349,255,26,192,542,1000,52,37,56,39,837,777,4.9100000000,9,4,34,4274,1508,142,603,1058,113,161,0.98,Cleveland Indians,Jacobs Field,2616940,97,98,CLE,CLE,CLE +2002,AL,DET,DET,C,5,161,80,55,106,N,N,N,N,575,5406,1340,265,37,124,363,1035,65,44,64,57,864,774,4.9300000000,11,7,33,4242,1593,163,463,794,142,148,0.97,Detroit Tigers,Comerica Park,1503623,92,95,DET,DET,DET +2002,AL,KCA,KCR,C,4,162,77,62,100,N,N,N,N,737,5535,1415,285,42,140,524,921,140,65,52,51,891,834,5.2100000000,12,6,30,4323,1587,212,572,909,130,153,0.97,Kansas City Royals,Kauffman Stadium,1323036,110,111,KCR,KCA,KCA +2002,AL,MIN,MIN,C,1,161,81,94,67,Y,N,N,N,768,5582,1518,348,36,167,472,1089,79,62,56,52,712,662,4.1200000000,8,9,47,4334,1454,184,439,1026,74,124,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1924473,100,100,MIN,MIN,MIN +2002,AL,NYA,NYY,E,1,161,80,103,58,Y,N,N,N,897,5601,1540,314,12,223,640,1171,100,38,72,41,697,625,3.8700000000,9,11,53,4356,1441,144,403,1135,127,117,0.97,New York Yankees,Yankee Stadium II,3465807,100,99,NYY,NYA,NYA +2002,AL,OAK,OAK,W,1,162,81,103,59,Y,N,N,N,800,5558,1450,279,28,205,609,1008,46,20,68,36,654,593,3.6800000000,9,19,48,4356,1391,135,474,1021,102,144,0.98,Oakland Athletics,Oakland Coliseum,2169811,98,97,OAK,OAK,OAK +2002,AL,SEA,SEA,W,3,162,81,93,69,N,N,N,N,814,5569,1531,285,31,152,629,1003,137,58,51,72,699,654,4.0700000000,8,12,43,4336,1422,178,441,1063,88,134,0.98,Seattle Mariners,Safeco Field,3542938,97,95,SEA,SEA,SEA +2002,AL,TBA,TBD,E,5,161,81,55,106,N,N,N,N,673,5604,1418,297,35,133,456,1115,102,45,58,36,918,846,5.2900000000,12,3,25,4321,1567,215,620,925,126,168,0.97,Tampa Bay Devil Rays,Tropicana Field,1065742,97,99,TBD,TBA,TBA +2002,AL,TEX,TEX,W,4,162,80,72,90,N,N,N,N,843,5618,1510,304,27,230,554,1055,62,34,62,50,882,824,5.1500000000,4,4,33,4319,1528,194,669,1030,99,152,0.98,Texas Rangers,The Ballpark at Arlington,2352397,106,107,TEX,TEX,TEX +2002,AL,TOR,TOR,E,3,162,81,78,84,N,N,N,N,813,5581,1457,305,38,187,522,1142,71,18,53,57,828,767,4.8000000000,6,6,41,4315,1504,177,590,991,107,159,0.98,Toronto Blue Jays,Skydome,1637900,104,104,TOR,TOR,TOR +2002,NL,ARI,ARI,W,1,162,81,98,64,Y,N,N,N,819,5508,1471,283,41,165,643,1016,92,46,50,53,674,630,3.9200000000,14,10,40,4340,1361,170,421,1303,89,116,0.98,Arizona Diamondbacks,Bank One Ballpark,3198977,111,111,ARI,ARI,ARI +2002,NL,ATL,ATL,E,1,161,81,101,59,Y,N,N,N,708,5495,1428,280,25,164,558,1028,76,39,54,49,565,511,3.1300000000,3,15,57,4402,1302,123,554,1058,114,170,0.98,Atlanta Braves,Turner Field,2603484,102,101,ATL,ATL,ATL +2002,NL,CHN,CHC,C,5,162,78,67,95,N,N,N,N,706,5496,1351,259,29,200,585,1269,63,21,44,39,759,687,4.2900000000,11,9,23,4324,1373,167,606,1333,114,144,0.98,Chicago Cubs,Wrigley Field,2693096,98,98,CHC,CHN,CHN +2002,NL,CIN,CIN,C,3,162,80,78,84,N,N,N,N,709,5470,1386,297,21,169,583,1188,116,52,66,40,774,690,4.2700000000,2,8,42,4361,1502,173,550,980,120,169,0.98,Cincinnati Reds,Cinergy Field,1855787,104,105,CIN,CIN,CIN +2002,NL,COL,COL,W,4,162,81,73,89,N,N,N,N,778,5512,1508,283,41,152,497,1043,103,53,56,50,898,825,5.2000000000,1,8,43,4280,1554,225,582,920,112,158,0.98,Colorado Rockies,Coors Field,2737838,116,116,COL,COL,COL +2002,NL,FLO,FLA,E,4,162,81,79,83,N,N,N,N,699,5496,1433,280,32,146,595,1130,177,73,61,49,763,706,4.3600000000,11,12,36,4369,1449,151,631,1104,106,163,0.98,Florida Marlins,Pro Player Stadium,813118,97,98,FLA,FLO,FLO +2002,NL,HOU,HOU,C,2,162,81,84,78,N,N,N,N,749,5503,1441,291,32,167,589,1120,71,27,59,37,695,643,4.0000000000,2,11,43,4335,1423,151,546,1219,83,149,0.98,Houston Astros,Minute Maid Park,2517357,106,105,HOU,HOU,HOU +2002,NL,LAN,LAD,W,3,162,81,92,70,N,N,N,N,713,5554,1464,286,29,155,428,940,96,37,53,44,643,598,3.6900000000,4,15,56,4373,1311,165,555,1132,90,134,0.98,Los Angeles Dodgers,Dodger Stadium,3131255,92,92,LAD,LAN,LAN +2002,NL,MIL,MIL,C,6,162,81,56,106,N,N,N,N,627,5415,1369,269,29,139,500,1125,94,50,55,34,821,752,4.7300000000,7,4,32,4297,1468,199,666,1026,103,154,0.98,Milwaukee Brewers,Miller Park,1969153,98,99,MIL,ML4,MIL +2002,NL,MON,WSN,E,2,162,81,83,79,N,N,N,N,735,5479,1432,300,36,162,575,1104,118,64,46,42,718,641,3.9700000000,9,3,39,4359,1475,165,508,1088,139,160,0.97,Montreal Expos,Stade Olympique,812045,103,103,MON,MON,MON +2002,NL,NYN,NYM,E,5,161,78,75,86,N,N,N,N,690,5496,1409,238,22,160,486,1044,87,42,63,30,703,624,3.8900000000,9,10,36,4328,1408,163,543,1107,144,138,0.97,New York Mets,Shea Stadium,2804838,97,97,NYM,NYN,NYN +2002,NL,PHI,PHI,E,3,161,79,80,81,N,N,N,N,710,5523,1428,325,41,165,640,1095,104,43,53,39,724,671,4.1700000000,5,9,47,4349,1381,153,570,1075,88,156,0.98,Philadelphia Phillies,Veterans Stadium,1618467,94,94,PHI,PHI,PHI +2002,NL,PIT,PIT,C,4,161,79,72,89,N,N,N,N,641,5330,1300,263,20,142,537,1109,86,49,73,41,730,664,4.2300000000,2,7,47,4238,1447,163,572,920,115,177,0.98,Pittsburgh Pirates,PNC Park,1784988,102,103,PIT,PIT,PIT +2002,NL,SDN,SDP,W,5,162,81,66,96,N,N,N,N,662,5515,1393,243,29,136,547,1062,71,44,30,41,815,737,4.6200000000,5,10,40,4309,1522,177,582,1108,128,162,0.97,San Diego Padres,Qualcomm Stadium,2220601,90,91,SDP,SDN,SDN +2002,NL,SFN,SFG,W,2,162,81,95,66,N,Y,Y,N,783,5497,1465,300,35,198,616,961,74,21,65,52,616,566,3.5400000000,10,13,43,4312,1349,116,523,992,90,166,0.98,San Francisco Giants,PacBell Park,3253203,95,94,SFG,SFN,SFN +2002,NL,SLN,STL,C,1,162,81,97,65,Y,N,N,N,787,5505,1475,285,26,175,542,927,86,42,67,49,648,595,3.7000000000,4,9,42,4339,1355,141,547,1009,103,168,0.98,St. Louis Cardinals,Busch Stadium II,3011756,98,97,STL,SLN,SLN +2003,AL,ANA,ANA,W,3,162,82,77,85,N,N,N,N,736,5487,1473,276,33,150,476,838,129,61,56,50,743,680,4.2800000000,5,9,39,4294,1444,190,486,980,105,138,0.98,Anaheim Angels,Edison International Field,3061094,98,97,ANA,ANA,ANA +2003,AL,BAL,BAL,E,4,163,81,71,91,N,N,N,N,743,5665,1516,277,24,152,431,902,89,36,54,40,820,767,4.7600000000,9,3,41,4349,1579,198,526,981,105,164,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2454523,99,99,BAL,BAL,BAL +2003,AL,BOS,BOS,E,2,162,81,95,67,N,Y,N,N,961,5769,1667,371,40,238,620,943,88,35,53,64,809,729,4.4800000000,5,6,36,4394,1503,153,488,1141,113,130,0.98,Boston Red Sox,Fenway Park II,2724165,105,103,BOS,BOS,BOS +2003,AL,CHA,CHW,C,2,162,81,86,76,N,N,N,N,791,5487,1445,303,19,220,519,916,77,29,58,41,715,663,4.1700000000,12,4,36,4293,1364,162,518,1056,93,154,0.98,Chicago White Sox,U.S. Cellular Field,1939524,102,102,CHW,CHA,CHA +2003,AL,CLE,CLE,C,4,162,81,68,94,N,N,N,N,699,5572,1413,296,26,158,466,1062,86,61,62,41,778,682,4.2100000000,5,7,34,4378,1477,179,501,943,126,178,0.98,Cleveland Indians,Jacobs Field,1730002,96,97,CLE,CLE,CLE +2003,AL,DET,DET,C,5,162,81,43,119,N,N,N,N,591,5466,1312,201,39,153,443,1099,98,63,47,49,928,847,5.3000000000,3,5,27,4316,1616,195,557,764,138,194,0.97,Detroit Tigers,Comerica Park,1368245,93,95,DET,DET,DET +2003,AL,KCA,KCR,C,3,162,80,83,79,N,N,N,N,836,5568,1526,288,39,162,476,926,120,42,75,57,867,809,5.0600000000,7,10,36,4316,1569,190,566,865,108,143,0.98,Kansas City Royals,Kauffman Stadium,1779895,107,108,KCR,KCA,KCA +2003,AL,MIN,MIN,C,1,162,81,90,72,Y,N,N,N,801,5655,1567,318,45,155,512,1027,94,44,63,52,758,716,4.4100000000,7,8,45,4385,1526,187,402,997,87,114,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1946011,101,100,MIN,MIN,MIN +2003,AL,NYA,NYY,E,1,163,82,101,61,Y,N,Y,N,877,5605,1518,304,14,230,684,1042,98,33,81,35,716,653,4.0200000000,8,12,49,4386,1512,145,375,1119,114,126,0.98,New York Yankees,Yankee Stadium II,3465600,98,97,NYY,NYA,NYA +2003,AL,OAK,OAK,W,1,162,81,96,66,Y,N,N,N,768,5497,1398,317,24,176,556,898,48,14,59,53,643,582,3.6300000000,16,14,48,4325,1336,140,499,1018,107,145,0.98,Oakland Athletics,Oakland Coliseum,2216596,99,98,OAK,OAK,OAK +2003,AL,SEA,SEA,W,2,162,81,93,69,N,N,N,N,795,5561,1509,290,33,139,586,989,108,37,53,46,637,602,3.7600000000,8,15,38,4323,1340,173,466,1001,65,159,0.98,Seattle Mariners,Safeco Field,3268509,95,95,SEA,SEA,SEA +2003,AL,TBA,TBD,E,5,162,81,63,99,N,N,N,N,715,5654,1501,298,38,137,420,1030,142,42,56,50,852,787,4.9300000000,7,7,30,4310,1454,196,639,877,103,158,0.98,Tampa Bay Devil Rays,Tropicana Field,1058695,95,97,TBD,TBA,TBA +2003,AL,TEX,TEX,W,4,162,81,71,91,N,N,N,N,826,5664,1506,274,36,239,488,1052,65,25,75,42,969,903,5.6700000000,4,3,43,4300,1625,208,603,1009,94,168,0.98,Texas Rangers,The Ballpark at Arlington,2094394,111,111,TEX,TEX,TEX +2003,AL,TOR,TOR,E,3,162,81,86,76,N,N,N,N,894,5661,1580,357,33,190,546,1081,37,25,90,56,826,748,4.6900000000,14,6,36,4305,1560,184,485,984,117,161,0.98,Toronto Blue Jays,Skydome,1799458,104,104,TOR,TOR,TOR +2003,NL,ARI,ARI,W,3,162,81,84,78,N,N,N,N,717,5570,1467,303,47,152,531,1006,76,38,45,52,685,621,3.8400000000,7,11,42,4365,1379,150,526,1291,107,132,0.98,Arizona Diamondbacks,Bank One Ballpark,2805542,108,109,ARI,ARI,ARI +2003,NL,ATL,ATL,E,1,162,81,101,61,Y,N,N,N,907,5670,1608,321,31,235,545,933,68,22,49,49,740,663,4.1000000000,4,7,51,4369,1425,147,555,992,121,166,0.98,Atlanta Braves,Turner Field,2401084,101,100,ATL,ATL,ATL +2003,NL,CHN,CHC,C,1,162,81,88,74,Y,N,N,N,724,5519,1431,302,24,172,492,1158,73,31,50,46,683,619,3.8300000000,13,14,36,4369,1304,143,617,1404,106,157,0.98,Chicago Cubs,Wrigley Field,2962630,101,101,CHC,CHN,CHN +2003,NL,CIN,CIN,C,5,162,81,69,93,N,N,N,N,694,5509,1349,239,21,182,524,1326,80,34,79,32,886,818,5.0900000000,4,5,38,4339,1578,209,590,932,141,152,0.97,Cincinnati Reds,Great American Ball Park,2355259,95,96,CIN,CIN,CIN +2003,NL,COL,COL,W,4,162,81,74,88,N,N,N,N,853,5518,1472,330,31,198,619,1134,63,37,52,38,892,821,5.2000000000,3,4,34,4260,1629,200,552,866,116,165,0.98,Colorado Rockies,Coors Field,2334085,115,116,COL,COL,COL +2003,NL,FLO,FLA,E,2,162,81,91,71,N,Y,Y,Y,751,5490,1459,292,44,157,515,978,150,74,57,41,692,648,4.0400000000,7,11,36,4336,1415,128,530,1132,78,162,0.98,Florida Marlins,Pro Player Stadium,1303215,98,98,FLA,FLO,FLO +2003,NL,HOU,HOU,C,2,162,81,87,75,N,N,N,N,805,5583,1466,308,30,191,557,1021,66,30,81,38,677,622,3.8600000000,1,5,50,4350,1350,161,565,1139,95,149,0.98,Houston Astros,Minute Maid Park,2454241,103,102,HOU,HOU,HOU +2003,NL,LAN,LAD,W,2,162,81,85,77,N,N,N,N,574,5458,1328,260,25,124,407,985,80,36,72,28,556,511,3.1600000000,3,17,58,4373,1254,127,526,1289,119,164,0.98,Los Angeles Dodgers,Dodger Stadium,3138626,94,94,LAD,LAN,LAN +2003,NL,MIL,MIL,C,6,162,81,68,94,N,N,N,N,714,5548,1423,266,24,196,547,1221,99,39,71,40,873,810,5.0200000000,5,3,44,4356,1590,219,575,1034,114,142,0.98,Milwaukee Brewers,Miller Park,1700354,98,100,MIL,ML4,MIL +2003,NL,MON,WSN,E,4,162,81,83,79,N,N,N,N,711,5437,1404,294,25,144,522,990,100,39,45,40,716,640,4.0100000000,15,10,42,4313,1467,181,463,1028,102,152,0.98,Montreal Expos,Stade Olympique/Hiram Bithorn Stadium,1025639,105,105,MON,MON,MON +2003,NL,NYN,NYM,E,5,161,80,66,95,N,N,N,N,642,5341,1317,262,24,124,489,1035,70,31,54,45,754,704,4.4800000000,3,10,38,4240,1497,168,576,907,118,158,0.98,New York Mets,Shea Stadium,2140599,97,98,NYM,NYN,NYN +2003,NL,PHI,PHI,E,3,162,81,86,76,N,N,N,N,791,5543,1448,325,27,166,651,1155,72,29,55,38,697,648,4.0400000000,9,13,33,4331,1386,142,536,1060,97,146,0.98,Philadelphia Phillies,Veterans Stadium,2259948,93,93,PHI,PHI,PHI +2003,NL,PIT,PIT,C,4,162,81,75,87,N,N,N,N,753,5581,1492,275,45,163,529,1049,86,37,87,38,801,744,4.6400000000,7,10,44,4333,1527,178,502,926,123,159,0.98,Pittsburgh Pirates,PNC Park,1636751,102,102,PIT,PIT,PIT +2003,NL,SDN,SDP,W,5,162,81,64,98,N,N,N,N,678,5531,1442,257,32,128,565,1073,76,39,57,42,831,774,4.8700000000,2,10,31,4294,1458,208,611,1091,102,141,0.98,San Diego Padres,Qualcomm Stadium,2030084,91,92,SDP,SDN,SDN +2003,NL,SFN,SFG,W,1,161,81,100,61,Y,N,N,N,755,5456,1440,281,29,180,593,980,53,37,40,39,638,595,3.7300000000,7,10,43,4312,1349,136,546,1006,80,163,0.98,San Francisco Giants,PacBell Park,3264898,99,98,SFG,SFN,SFN +2003,NL,SLN,STL,C,3,162,81,85,77,N,N,N,N,876,5672,1580,342,32,196,580,952,82,32,73,54,796,748,4.6000000000,9,10,41,4391,1544,210,508,969,77,138,0.98,St. Louis Cardinals,Busch Stadium II,2910386,97,96,STL,SLN,SLN +2004,AL,ANA,ANA,W,1,162,81,92,70,Y,N,N,N,836,5675,1603,272,37,162,450,942,143,46,73,41,734,692,4.2800000000,2,11,50,4363,1476,170,502,1164,90,126,0.98,Anaheim Angels,Angels Stadium of Anaheim,3375677,97,97,ANA,ANA,ANA +2004,AL,BAL,BAL,E,3,162,81,78,84,N,N,N,N,842,5736,1614,319,18,169,528,949,101,41,57,62,830,760,4.7000000000,8,10,27,4366,1488,159,687,1090,110,161,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2744018,98,99,BAL,BAL,BAL +2004,AL,BOS,BOS,E,2,162,81,98,64,N,Y,Y,Y,949,5720,1613,373,25,222,659,1189,68,30,69,55,768,674,4.1800000000,4,12,36,4354,1430,159,447,1132,118,129,0.98,Boston Red Sox,Fenway Park II,2837294,106,105,BOS,BOS,BOS +2004,AL,CHA,CHW,C,2,162,81,83,79,N,N,N,N,865,5534,1481,284,19,242,499,1030,78,51,63,42,831,782,4.9100000000,8,8,34,4297,1505,224,527,1013,100,167,0.98,Chicago White Sox,U.S. Cellular Field,1930537,102,102,CHW,CHA,CHA +2004,AL,CLE,CLE,C,3,162,81,80,82,N,N,N,N,858,5676,1565,345,29,184,606,1009,94,55,78,42,857,784,4.8100000000,8,8,32,4400,1553,201,579,1115,106,152,0.98,Cleveland Indians,Jacobs Field,1814401,94,94,CLE,CLE,CLE +2004,AL,DET,DET,C,4,162,81,72,90,N,N,N,N,827,5623,1531,284,54,201,518,1144,86,50,50,43,844,788,4.9300000000,7,9,35,4319,1542,190,530,995,144,160,0.97,Detroit Tigers,Comerica Park,1917004,95,96,DET,DET,DET +2004,AL,KCA,KCR,C,5,162,80,58,104,N,N,N,N,720,5538,1432,261,29,150,461,1057,67,48,76,38,905,813,5.1500000000,6,3,25,4261,1638,208,518,887,131,169,0.97,Kansas City Royals,Kauffman Stadium,1661478,102,103,KCR,KCA,KCA +2004,AL,MIN,MIN,C,1,162,81,92,70,Y,N,N,N,780,5623,1494,310,24,191,513,982,116,46,64,40,715,661,4.0300000000,4,9,48,4428,1523,167,431,1123,101,158,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,1911490,103,102,MIN,MIN,MIN +2004,AL,NYA,NYY,E,1,162,81,101,61,Y,N,N,N,897,5527,1483,281,20,242,670,982,84,33,80,50,808,752,4.6900000000,1,5,59,4331,1532,182,445,1058,99,148,0.98,New York Yankees,Yankee Stadium II,3775292,98,97,NYY,NYA,NYA +2004,AL,OAK,OAK,W,2,162,81,91,71,N,N,N,N,793,5728,1545,336,15,189,608,1061,47,22,55,43,742,682,4.1700000000,10,8,35,4414,1466,164,544,1034,91,172,0.98,Oakland Athletics,Network Associates Coliseum,2201516,99,98,OAK,OAK,OAK +2004,AL,SEA,SEA,W,4,162,82,63,99,N,N,N,N,698,5722,1544,276,20,136,492,1058,110,42,54,48,823,772,4.7600000000,7,7,28,4378,1498,212,575,1036,103,140,0.98,Seattle Mariners,Safeco Field,2940731,97,98,SEA,SEA,SEA +2004,AL,TBA,TBD,E,4,161,80,70,91,N,N,N,N,714,5483,1416,278,46,145,469,944,132,42,55,56,842,757,4.8100000000,3,5,35,4251,1459,192,580,923,119,139,0.98,Tampa Bay Devil Rays,Tropicana Field,1274911,96,98,TBD,TBA,TBA +2004,AL,TEX,TEX,W,3,162,81,89,73,N,N,N,N,860,5615,1492,323,34,227,500,1099,69,36,61,57,794,724,4.5300000000,5,9,52,4319,1536,182,547,979,117,152,0.98,Texas Rangers,The Ballpark at Arlington,2513685,108,109,TEX,TEX,TEX +2004,AL,TOR,TOR,E,5,161,81,67,94,N,N,N,N,719,5531,1438,290,34,145,513,1083,58,31,71,42,823,775,4.9100000000,6,11,37,4263,1505,181,608,956,91,150,0.98,Toronto Blue Jays,Skydome,1900041,104,104,TOR,TOR,TOR +2004,NL,ARI,ARI,W,5,162,81,51,111,N,N,N,N,615,5544,1401,295,38,135,441,1022,53,32,35,37,899,794,4.9800000000,5,6,33,4308,1480,197,668,1153,139,144,0.97,Arizona Diamondbacks,Bank One Ballpark,2519560,105,107,ARI,ARI,ARI +2004,NL,ATL,ATL,E,1,162,81,96,66,Y,N,N,N,803,5570,1503,304,37,178,587,1158,86,32,59,48,668,603,3.7400000000,4,13,48,4350,1475,154,523,1025,116,171,0.98,Atlanta Braves,Turner Field,2327565,101,100,ATL,ATL,ATL +2004,NL,CHN,CHC,C,3,162,82,89,73,N,N,N,N,789,5628,1508,308,29,235,489,1080,66,28,38,48,665,621,3.8100000000,3,6,42,4396,1363,169,545,1346,86,126,0.98,Chicago Cubs,Wrigley Field,3170154,103,102,CHC,CHN,CHN +2004,NL,CIN,CIN,C,4,162,81,76,86,N,N,N,N,750,5518,1380,287,28,194,599,1335,77,25,81,25,907,832,5.1900000000,5,8,47,4331,1595,236,572,992,113,123,0.98,Cincinnati Reds,Great American Ball Park,2287250,98,99,CIN,CIN,CIN +2004,NL,COL,COL,W,4,162,81,68,94,N,N,N,N,833,5577,1531,331,34,202,568,1181,44,33,54,37,923,883,5.5400000000,3,2,36,4306,1634,198,697,947,89,161,0.98,Colorado Rockies,Coors Field,2338069,113,114,COL,COL,COL +2004,NL,FLO,FLA,E,3,162,80,83,79,N,N,N,N,718,5486,1447,275,32,148,499,968,96,43,58,40,700,655,4.1000000000,6,14,53,4317,1395,166,513,1116,86,153,0.98,Florida Marlins,Pro Player Stadium,1723105,95,95,FLA,FLO,FLO +2004,NL,HOU,HOU,C,2,162,81,92,70,N,Y,N,N,803,5468,1458,294,36,187,590,999,89,30,61,52,698,650,4.0500000000,2,13,47,4329,1416,174,525,1282,101,136,0.98,Houston Astros,Minute Maid Park,3087872,102,101,HOU,HOU,HOU +2004,NL,LAN,LAD,W,1,162,81,93,69,Y,N,N,N,761,5542,1450,226,30,203,536,1092,102,41,62,35,684,647,4.0100000000,2,6,51,4360,1386,178,521,1066,73,145,0.98,Los Angeles Dodgers,Dodger Stadium,3488283,95,95,LAD,LAN,LAN +2004,NL,MIL,MIL,C,6,161,81,67,94,N,N,N,N,634,5483,1358,295,32,135,540,1312,138,40,68,40,757,679,4.2400000000,6,10,42,4326,1440,164,476,1098,117,132,0.98,Milwaukee Brewers,Miller Park,2062382,100,101,MIL,ML4,MIL +2004,NL,MON,WSN,E,5,162,80,67,95,N,N,N,N,635,5474,1361,276,27,151,496,925,109,38,35,33,769,696,4.3300000000,11,11,31,4341,1477,191,582,1032,99,171,0.98,Montreal Expos,Stade Olympique/Hiram Bithorn Stadium,749550,105,105,MON,MON,MON +2004,NL,NYN,NYM,E,4,162,81,71,91,N,N,N,N,684,5532,1376,289,20,185,512,1159,107,23,61,34,731,658,4.0900000000,2,6,31,4347,1452,156,592,977,137,144,0.97,New York Mets,Shea Stadium,2318951,99,99,NYM,NYN,NYN +2004,NL,PHI,PHI,E,2,162,81,86,76,N,N,N,N,840,5643,1505,303,23,215,645,1133,100,27,58,46,781,724,4.4500000000,4,5,43,4388,1488,214,502,1070,81,142,0.98,Philadelphia Phillies,Citizens Bank Park,3250092,105,104,PHI,PHI,PHI +2004,NL,PIT,PIT,C,5,161,80,72,89,N,N,N,N,680,5483,1428,267,39,142,415,1066,63,40,95,42,744,680,4.2900000000,3,8,46,4284,1451,149,576,1079,103,189,0.98,Pittsburgh Pirates,PNC Park,1580031,99,100,PIT,PIT,PIT +2004,NL,SDN,SDP,W,3,162,81,87,75,N,N,N,N,768,5573,1521,304,32,139,566,910,52,25,56,66,705,645,4.0300000000,3,8,44,4323,1460,184,422,1079,108,146,0.98,San Diego Padres,Petco Park,3016752,90,90,SDP,SDN,SDN +2004,NL,SFN,SFG,W,2,162,82,91,71,N,N,N,N,850,5546,1500,314,33,183,705,874,43,23,72,51,770,695,4.2900000000,8,8,46,4371,1481,161,548,1020,101,153,0.98,San Francisco Giants,SBC Park,3256854,101,101,SFG,SFN,SFN +2004,NL,SLN,STL,C,1,162,81,105,57,Y,N,Y,N,855,5555,1544,319,24,214,548,1085,111,47,51,70,659,605,3.7500000000,4,12,57,4361,1378,169,440,1041,97,154,0.98,St. Louis Cardinals,Busch Stadium II,3048427,100,99,STL,SLN,SLN +2005,AL,BAL,BAL,E,4,162,81,74,88,N,N,N,N,729,5551,1492,296,27,189,447,902,83,37,54,42,800,724,4.5600000000,2,9,38,4283,1458,180,580,1052,107,154,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2624740,99,99,BAL,BAL,BAL +2005,AL,BOS,BOS,E,2,162,81,95,67,N,Y,N,N,910,5626,1579,339,21,199,653,1044,45,12,47,63,805,752,4.7400000000,6,8,38,4287,1550,164,440,959,109,135,0.98,Boston Red Sox,Fenway Park II,2847888,104,104,BOS,BOS,BOS +2005,AL,CHA,CHW,C,1,162,81,99,63,Y,N,Y,Y,741,5529,1450,253,23,200,435,1002,137,67,79,49,645,592,3.6100000000,9,10,54,4427,1392,167,459,1040,94,166,0.98,Chicago White Sox,U.S. Cellular Field,2342833,103,103,CHW,CHA,CHA +2005,AL,CLE,CLE,C,2,162,81,93,69,N,N,N,N,790,5609,1522,337,30,207,503,1093,62,36,54,50,642,582,3.6100000000,6,10,51,4358,1363,157,413,1050,106,156,0.98,Cleveland Indians,Jacobs Field,2013763,96,96,CLE,CLE,CLE +2005,AL,DET,DET,C,4,162,81,71,91,N,N,N,N,723,5602,1521,283,45,168,384,1038,66,28,53,52,787,719,4.5100000000,7,2,37,4307,1504,193,461,907,110,171,0.98,Detroit Tigers,Comerica Park,2024431,98,98,DET,DET,DET +2005,AL,KCA,KCR,C,5,162,81,56,106,N,N,N,N,701,5503,1445,289,34,126,424,1008,53,33,63,50,935,862,5.4900000000,4,4,25,4240,1640,178,580,924,125,163,0.97,Kansas City Royals,Kauffman Stadium,1371181,99,101,KCR,KCA,KCA +2005,AL,LAA,ANA,W,1,162,81,95,67,Y,N,N,N,761,5624,1520,278,30,147,447,848,161,57,29,39,643,598,3.6800000000,7,11,54,4393,1419,158,443,1126,87,139,0.98,Los Angeles Angels of Anaheim,Angel Stadium,3404686,98,97,LAA,ANA,ANA +2005,AL,MIN,MIN,C,3,162,81,83,79,N,N,N,N,688,5564,1441,269,32,134,485,978,102,44,59,42,662,604,3.7100000000,9,8,44,4393,1458,169,348,965,102,171,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2034243,102,102,MIN,MIN,MIN +2005,AL,NYA,NYY,E,1,162,81,95,67,Y,N,N,N,886,5624,1552,259,16,229,637,989,84,27,73,43,789,718,4.5200000000,8,14,46,4292,1495,164,463,985,95,151,0.98,New York Yankees,Yankee Stadium II,4090696,98,97,NYY,NYA,NYA +2005,AL,OAK,OAK,W,2,162,81,88,74,N,N,N,N,772,5627,1476,310,20,155,537,819,31,22,52,40,658,594,3.6900000000,9,12,38,4351,1315,154,504,1075,88,166,0.98,Oakland Athletics,McAfee Coliseum,2109118,101,100,OAK,OAK,OAK +2005,AL,SEA,SEA,W,4,162,81,69,93,N,N,N,N,699,5507,1408,289,34,130,466,986,102,47,48,37,751,712,4.4900000000,6,7,39,4283,1483,179,496,892,86,144,0.98,Seattle Mariners,Safeco Field,2725459,95,96,SEA,SEA,SEA +2005,AL,TBA,TBD,E,5,162,81,67,95,N,N,N,N,750,5552,1519,289,40,157,412,990,151,49,69,51,936,851,5.3900000000,1,4,43,4265,1570,194,615,949,124,139,0.97,Tampa Bay Devil Rays,Tropicana Field,1141669,99,100,TBD,TBA,TBA +2005,AL,TEX,TEX,W,3,162,81,79,83,N,N,N,N,865,5716,1528,311,29,260,495,1112,67,15,48,32,858,794,4.9600000000,2,6,46,4320,1589,159,522,932,108,149,0.98,Texas Rangers,Ameriquest Field,2525221,106,106,TEX,TEX,TEX +2005,AL,TOR,TOR,E,3,162,81,80,82,N,N,N,N,775,5581,1480,307,39,136,486,955,72,35,89,56,705,653,4.0600000000,9,8,35,4341,1475,185,444,958,95,154,0.98,Toronto Blue Jays,Rogers Centre,2014995,102,102,TOR,TOR,TOR +2005,NL,ARI,ARI,W,2,162,81,77,85,N,N,N,N,696,5550,1419,291,27,191,606,1094,67,26,55,45,856,783,4.8400000000,6,10,45,4369,1580,193,537,1038,94,159,0.98,Arizona Diamondbacks,Bank One Ballpark,2059424,103,105,ARI,ARI,ARI +2005,NL,ATL,ATL,E,1,162,81,90,72,Y,N,N,N,769,5486,1453,308,37,184,534,1084,92,32,45,46,674,639,3.9800000000,8,12,38,4331,1487,145,520,929,86,170,0.98,Atlanta Braves,Turner Field,2521167,101,100,ATL,ATL,ATL +2005,NL,CHN,CHC,C,4,162,81,79,83,N,N,N,N,703,5584,1506,323,23,194,419,920,65,39,50,37,714,671,4.1900000000,8,10,39,4320,1357,186,576,1256,101,136,0.98,Chicago Cubs,Wrigley Field,3099992,104,104,CHC,CHN,CHN +2005,NL,CIN,CIN,C,5,163,82,73,89,N,N,N,N,820,5565,1453,335,15,222,611,1303,72,23,62,39,889,820,5.1500000000,2,1,31,4299,1657,219,492,955,104,133,0.98,Cincinnati Reds,Great American Ball Park,1943067,100,101,CIN,CIN,CIN +2005,NL,COL,COL,W,5,162,81,67,95,N,N,N,N,740,5542,1477,280,34,150,509,1103,65,32,64,34,862,808,5.1300000000,4,4,37,4256,1600,175,604,981,118,158,0.98,Colorado Rockies,Coors Field,1914389,112,113,COL,COL,COL +2005,NL,FLO,FLA,E,3,162,81,83,79,N,N,N,N,717,5502,1499,306,32,128,512,918,96,38,67,50,732,666,4.1600000000,14,15,42,4327,1459,116,563,1125,103,177,0.98,Florida Marlins,Dolphin Stadium,1852608,94,94,FLA,FLO,FLO +2005,NL,HOU,HOU,C,2,163,81,89,73,N,Y,Y,N,693,5462,1400,281,32,161,481,1037,115,44,72,42,609,563,3.5100000000,6,11,45,4329,1336,155,440,1164,89,146,0.98,Houston Astros,Minute Maid Park,2804760,101,100,HOU,HOU,HOU +2005,NL,LAN,LAD,W,4,162,81,71,91,N,N,N,N,685,5433,1374,284,21,149,541,1094,58,35,67,33,755,695,4.3800000000,6,9,40,4282,1434,182,471,1004,106,141,0.98,Los Angeles Dodgers,Dodger Stadium,3603646,98,97,LAD,LAN,LAN +2005,NL,MIL,MIL,C,3,162,81,81,81,N,N,N,N,726,5448,1413,327,19,175,531,1162,79,34,73,38,697,635,3.9700000000,7,6,46,4314,1382,169,569,1173,119,139,0.98,Milwaukee Brewers,Miller Park,2211023,101,101,MIL,ML4,MIL +2005,NL,NYN,NYM,E,3,162,81,83,79,N,N,N,N,722,5505,1421,279,32,175,486,1075,153,40,48,38,648,599,3.7600000000,8,11,38,4307,1390,135,491,1012,106,146,0.98,New York Mets,Shea Stadium,2829929,98,97,NYM,NYN,NYN +2005,NL,PHI,PHI,E,2,162,81,88,74,N,N,N,N,807,5542,1494,282,35,167,639,1083,116,27,56,46,726,672,4.2100000000,4,6,40,4305,1379,189,487,1159,90,132,0.98,Philadelphia Phillies,Citizens Bank Park,2665304,105,104,PHI,PHI,PHI +2005,NL,PIT,PIT,C,6,162,81,67,95,N,N,N,N,680,5573,1445,292,38,139,471,1092,73,30,72,49,769,706,4.4200000000,4,14,35,4308,1456,162,612,958,117,193,0.98,Pittsburgh Pirates,PNC Park,1817245,99,100,PIT,PIT,PIT +2005,NL,SDN,SDP,W,1,162,81,82,80,Y,N,N,N,684,5502,1416,269,39,130,600,977,99,44,49,48,726,668,4.1300000000,4,8,45,4366,1452,146,503,1133,109,136,0.98,San Diego Padres,Petco Park,2869787,92,91,SDP,SDN,SDN +2005,NL,SFN,SFG,W,3,162,81,75,87,N,N,N,N,649,5462,1427,299,26,128,431,901,71,35,49,44,745,695,4.3300000000,4,8,46,4333,1456,151,592,972,90,146,0.98,San Francisco Giants,SBC Park,3181023,101,101,SFG,SFN,SFN +2005,NL,SLN,STL,C,1,162,81,100,62,Y,N,N,N,805,5538,1494,287,26,170,534,947,83,36,62,35,634,560,3.4900000000,15,14,48,4337,1399,153,443,974,100,196,0.98,St. Louis Cardinals,Busch Stadium II,3538988,101,100,STL,SLN,SLN +2005,NL,WAS,WSN,E,5,162,81,81,81,N,N,N,N,639,5426,1367,311,32,117,491,1090,45,45,89,45,673,627,3.8700000000,4,9,51,4374,1456,140,539,997,92,156,0.98,Washington Nationals,R.F.K. Stadium,2731993,95,96,WSN,MON,WAS +2006,AL,BAL,BAL,E,4,162,81,70,92,N,N,N,N,768,5610,1556,288,20,164,474,878,121,32,73,41,899,843,5.3500000000,5,9,35,4257,1579,216,613,1016,102,156,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2153139,99,100,BAL,BAL,BAL +2006,AL,BOS,BOS,E,3,162,81,86,76,N,N,N,N,820,5619,1510,327,16,192,672,1056,51,23,66,56,825,773,4.8300000000,3,6,46,4324,1570,181,509,1070,66,174,0.98,Boston Red Sox,Fenway Park II,2930588,105,104,BOS,BOS,BOS +2006,AL,CHA,CHW,C,3,162,81,90,72,N,N,N,N,868,5657,1586,291,20,236,502,1056,93,48,58,57,794,743,4.6100000000,5,11,46,4347,1534,200,433,1012,90,145,0.98,Chicago White Sox,U.S. Cellular Field,2957414,104,104,CHW,CHA,CHA +2006,AL,CLE,CLE,C,4,162,81,78,84,N,N,N,N,870,5619,1576,351,27,196,556,1204,55,23,54,43,782,698,4.4100000000,13,13,24,4270,1583,166,429,948,118,165,0.98,Cleveland Indians,Jacobs Field,1997995,99,98,CLE,CLE,CLE +2006,AL,DET,DET,C,2,162,81,95,67,N,Y,Y,N,822,5642,1548,294,40,203,430,1133,60,40,45,36,675,618,3.8400000000,3,16,46,4344,1420,160,489,1003,106,162,0.98,Detroit Tigers,Comerica Park,2595937,100,100,DET,DET,DET +2006,AL,KCA,KCR,C,5,162,81,62,100,N,N,N,N,757,5589,1515,335,37,124,474,1040,65,34,64,48,971,896,5.6500000000,3,5,35,4279,1648,213,637,904,98,189,0.98,Kansas City Royals,Kauffman Stadium,1372638,101,103,KCR,KCA,KCA +2006,AL,LAA,ANA,W,2,162,81,89,73,N,N,N,N,766,5609,1539,309,29,159,486,914,148,57,42,53,732,652,4.0400000000,5,12,50,4358,1410,158,471,1164,124,154,0.97,Los Angeles Angels of Anaheim,Angel Stadium,3406790,100,100,LAA,ANA,ANA +2006,AL,MIN,MIN,C,1,162,81,96,66,Y,N,N,N,801,5602,1608,275,34,143,490,872,101,42,50,55,683,632,3.9500000000,1,6,40,4318,1490,182,356,1164,84,135,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2285018,98,98,MIN,MIN,MIN +2006,AL,NYA,NYY,E,1,162,81,97,65,Y,N,N,N,930,5651,1608,327,21,210,649,1053,139,35,72,49,767,708,4.4100000000,5,8,43,4331,1463,170,496,1019,104,145,0.98,New York Yankees,Yankee Stadium II,4248067,101,99,NYY,NYA,NYA +2006,AL,OAK,OAK,W,1,162,81,93,69,Y,N,N,N,771,5500,1429,266,22,175,650,976,61,20,50,56,727,679,4.2100000000,5,11,54,4355,1525,162,529,1003,84,173,0.98,Oakland Athletics,McAfee Coliseum,1976625,97,97,OAK,OAK,OAK +2006,AL,SEA,SEA,W,4,162,81,78,84,N,N,N,N,756,5670,1540,266,42,172,404,974,106,37,63,38,792,739,4.6000000000,6,6,47,4340,1500,183,560,1067,88,150,0.98,Seattle Mariners,Safeco Field,2481165,97,97,SEA,SEA,SEA +2006,AL,TBA,TBD,E,5,162,81,61,101,N,N,N,N,689,5474,1395,267,33,190,441,1106,134,52,47,43,856,782,4.9600000000,3,7,33,4261,1600,180,606,979,116,156,0.98,Tampa Bay Devil Rays,Tropicana Field,1368950,99,101,TBD,TBA,TBA +2006,AL,TEX,TEX,W,3,162,81,80,82,N,N,N,N,835,5659,1571,357,23,183,505,1061,53,24,40,50,784,731,4.6000000000,3,8,42,4294,1558,162,496,972,98,174,0.98,Texas Rangers,Ameriquest Field,2388757,101,101,TEX,TEX,TEX +2006,AL,TOR,TOR,E,2,162,81,87,75,N,N,N,N,809,5596,1591,348,27,199,514,906,65,33,63,52,754,694,4.3700000000,6,6,42,4285,1447,185,504,1076,99,157,0.98,Toronto Blue Jays,Rogers Centre,2302212,100,100,TOR,TOR,TOR +2006,NL,ARI,ARI,W,4,162,81,76,86,N,N,N,N,773,5645,1506,331,38,160,504,965,76,30,67,53,788,727,4.4800000000,8,9,34,4379,1503,168,536,1115,104,172,0.98,Arizona Diamondbacks,Chase Field,2091685,105,105,ARI,ARI,ARI +2006,NL,ATL,ATL,E,3,162,81,79,83,N,N,N,N,849,5583,1510,312,26,222,526,1169,52,35,52,44,805,736,4.6000000000,6,6,38,4324,1529,183,572,1049,99,146,0.98,Atlanta Braves,Turner Field,2550524,100,99,ATL,ATL,ATL +2006,NL,CHN,CHC,C,6,162,81,66,96,N,N,N,N,716,5587,1496,271,46,166,395,928,121,49,43,37,834,758,4.7400000000,2,7,29,4317,1396,210,687,1250,106,122,0.98,Chicago Cubs,Wrigley Field,3123215,103,103,CHC,CHN,CHN +2006,NL,CIN,CIN,C,3,162,82,80,82,N,N,N,N,749,5515,1419,291,12,217,614,1192,124,33,59,38,801,725,4.5100000000,9,10,36,4337,1576,213,464,1053,128,139,0.97,Cincinnati Reds,Great American Ball Park,2134607,104,104,CIN,CIN,CIN +2006,NL,COL,COL,W,4,162,81,76,86,N,N,N,N,813,5562,1504,325,54,157,561,1108,85,50,60,45,812,749,4.6600000000,5,8,34,4342,1549,155,553,952,91,190,0.98,Colorado Rockies,Coors Field,2104362,109,109,COL,COL,COL +2006,NL,FLO,FLA,E,4,162,81,78,84,N,N,N,N,758,5502,1454,309,42,182,497,1249,110,58,74,42,772,696,4.3700000000,6,6,41,4300,1465,166,622,1088,126,166,0.97,Florida Marlins,Dolphin Stadium,1164134,95,96,FLA,FLO,FLO +2006,NL,HOU,HOU,C,2,162,81,82,80,N,N,N,N,735,5521,1407,275,27,174,585,1076,79,36,73,46,719,666,4.0800000000,5,12,42,4406,1425,182,480,1160,80,164,0.98,Houston Astros,Minute Maid Park,3022763,100,99,HOU,HOU,HOU +2006,NL,LAN,LAD,W,2,162,81,88,74,N,Y,N,N,820,5628,1552,307,58,153,601,959,128,49,51,48,751,686,4.2300000000,1,10,40,4381,1524,152,492,1068,115,174,0.98,Los Angeles Dodgers,Dodger Stadium,3758545,101,100,LAD,LAN,LAN +2006,NL,MIL,MIL,C,4,162,81,75,87,N,N,N,N,730,5433,1400,301,20,180,502,1233,71,37,82,53,833,763,4.8200000000,7,8,43,4277,1454,177,514,1145,117,126,0.98,Milwaukee Brewers,Miller Park,2335643,101,101,MIL,ML4,MIL +2006,NL,NYN,NYM,E,1,162,81,97,65,Y,N,N,N,834,5558,1469,323,41,200,547,1071,146,35,62,47,731,673,4.1400000000,5,12,43,4384,1402,180,527,1161,104,131,0.98,New York Mets,Shea Stadium,3379535,98,97,NYM,NYN,NYN +2006,NL,PHI,PHI,E,2,162,81,85,77,N,N,N,N,865,5687,1518,294,41,216,626,1203,92,25,95,44,812,747,4.6000000000,4,6,42,4381,1561,211,512,1138,104,153,0.98,Philadelphia Phillies,Citizens Bank Park,2701815,105,104,PHI,PHI,PHI +2006,NL,PIT,PIT,C,5,162,81,67,95,N,N,N,N,691,5558,1462,286,17,141,459,1200,68,23,89,49,797,720,4.5200000000,2,10,39,4305,1545,156,620,1060,104,168,0.98,Pittsburgh Pirates,PNC Park,1861549,98,99,PIT,PIT,PIT +2006,NL,SDN,SDP,W,1,162,81,88,74,Y,N,N,N,731,5576,1465,298,38,161,564,1104,123,31,40,47,679,629,3.8700000000,4,11,50,4391,1385,176,468,1097,92,138,0.98,San Diego Padres,Petco Park,2659757,91,90,SDP,SDN,SDN +2006,NL,SFN,SFG,W,3,161,81,76,85,N,N,N,N,746,5472,1418,297,52,163,494,891,58,25,53,37,790,735,4.6300000000,7,9,37,4289,1422,153,584,992,91,132,0.98,San Francisco Giants,AT&T Park,3130313,100,100,SFG,SFN,SFN +2006,NL,SLN,STL,C,1,161,80,83,78,Y,N,Y,Y,781,5522,1484,292,27,184,531,922,59,32,61,40,762,721,4.5400000000,6,9,38,4289,1475,193,504,970,98,170,0.98,St. Louis Cardinals,Busch Stadium III,3407104,99,99,STL,SLN,SLN +2006,NL,WAS,WSN,E,5,162,81,71,91,N,N,N,N,746,5495,1437,322,22,164,594,1156,123,62,69,49,872,803,5.0300000000,1,3,32,4309,1535,193,584,960,131,123,0.97,Washington Nationals,R.F.K. Stadium,2153056,94,95,WSN,MON,WAS +2007,AL,BAL,BAL,E,4,162,,69,93,N,N,N,N,756,5631,1529,306,30,142,500,939,144,42,47,47,868,827,5.1700000000,4,9,30,4316,1491,161,696,1087,79,155,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2164822,101,102,BAL,BAL,BAL +2007,AL,BOS,BOS,E,1,162,,96,66,Y,N,Y,Y,867,5589,1561,352,35,166,689,1042,96,24,64,54,657,618,3.8700000000,5,13,45,4316,1350,151,482,1149,81,145,0.98,Boston Red Sox,Fenway Park II,2970755,106,105,BOS,BOS,BOS +2007,AL,CHA,CHW,C,4,162,,72,90,N,N,N,N,693,5441,1341,249,20,190,532,1149,78,45,52,35,839,763,4.7700000000,9,9,42,4322,1556,174,499,1015,108,166,0.98,Chicago White Sox,U.S. Cellular Field,2684395,104,104,CHW,CHA,CHA +2007,AL,CLE,CLE,C,1,162,,96,66,Y,N,N,N,811,5604,1504,305,27,178,590,1202,72,41,80,59,704,658,4.0500000000,9,9,49,4388,1519,146,410,1047,92,166,0.98,Cleveland Indians,Jacobs Field,2275912,101,100,CLE,CLE,CLE +2007,AL,DET,DET,C,2,162,,88,74,N,N,N,N,887,5757,1652,352,50,177,474,1054,103,30,56,45,797,735,4.5700000000,1,9,44,4342,1498,174,566,1047,99,147,0.98,Detroit Tigers,Comerica Park,3047133,102,101,DET,DET,DET +2007,AL,KCA,KCR,C,5,162,,69,93,N,N,N,N,706,5534,1447,300,46,102,428,1069,78,44,89,47,778,716,4.4800000000,2,6,36,4312,1547,168,520,993,106,159,0.98,Kansas City Royals,Kauffman Stadium,1616867,100,101,KCR,KCA,KCA +2007,AL,LAA,ANA,W,1,162,,94,68,Y,N,N,N,822,5554,1578,324,23,123,507,883,139,55,40,65,731,674,4.2300000000,5,9,43,4305,1480,151,477,1156,101,154,0.98,Los Angeles Angels of Anaheim,Angel Stadium,3365632,101,100,LAA,ANA,ANA +2007,AL,MIN,MIN,C,3,162,,79,83,N,N,N,N,718,5522,1460,273,36,118,512,839,112,30,48,45,725,663,4.1500000000,5,8,38,4310,1505,185,420,1094,95,149,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2296383,95,95,MIN,MIN,MIN +2007,AL,NYA,NYY,E,2,162,,94,68,N,Y,N,N,968,5717,1656,326,32,201,637,991,123,40,78,54,777,724,4.4900000000,1,5,34,4352,1498,150,578,1009,88,173,0.98,New York Yankees,Yankee Stadium II,4271083,101,100,NYY,NYA,NYA +2007,AL,OAK,OAK,W,3,162,,76,86,N,N,N,N,741,5577,1430,295,16,171,664,1119,52,20,49,56,758,689,4.2800000000,4,9,36,4344,1468,138,530,1036,90,151,0.98,Oakland Athletics,McAfee Coliseum,1921844,94,94,OAK,OAK,OAK +2007,AL,SEA,SEA,W,2,162,,88,74,N,N,N,N,794,5684,1629,284,22,153,389,861,81,30,62,40,813,754,4.7300000000,6,12,43,4303,1578,147,546,1020,90,167,0.98,Seattle Mariners,Safeco Field,2672223,96,97,SEA,SEA,SEA +2007,AL,TBA,TBD,E,5,162,,66,96,N,N,N,N,782,5593,1500,291,36,187,545,1324,131,48,53,52,944,879,5.5300000000,2,2,28,4289,1649,199,568,1194,117,155,0.98,Tampa Bay Devil Rays,Tropicana Field,1387603,98,100,TBD,TBA,TBA +2007,AL,TEX,TEX,W,4,162,,75,87,N,N,N,N,816,5555,1460,298,36,179,503,1224,88,25,56,42,844,755,4.7500000000,0,6,42,4290,1525,155,668,976,124,178,0.98,Texas Rangers,Rangers Ballpark in Arlington,2353862,101,101,TEX,TEX,TEX +2007,AL,TOR,TOR,E,3,162,,83,79,N,N,N,N,753,5536,1434,344,24,165,533,1044,57,22,47,48,699,644,4.0000000000,11,9,44,4346,1383,157,479,1067,102,160,0.98,Toronto Blue Jays,Rogers Centre,2360644,100,99,TOR,TOR,TOR +2007,NL,ARI,ARI,W,1,162,,90,72,Y,N,N,N,712,5398,1350,286,40,171,532,1111,109,24,57,58,732,662,4.1300000000,7,12,51,4323,1446,169,546,1088,106,157,0.98,Arizona Diamondbacks,Chase Field,2325249,107,107,ARI,ARI,ARI +2007,NL,ATL,ATL,E,3,162,,84,78,N,N,N,N,810,5689,1562,328,27,176,534,1149,64,30,49,47,733,665,4.1100000000,1,6,36,4369,1442,172,537,1106,107,140,0.98,Atlanta Braves,Turner Field,2745207,98,98,ATL,ATL,ATL +2007,NL,CHN,CHC,C,1,162,,85,77,Y,N,N,N,752,5643,1530,340,28,151,500,1054,86,33,40,37,690,650,4.0400000000,2,10,39,4340,1340,165,573,1211,94,134,0.98,Chicago Cubs,Wrigley Field,3252462,105,104,CHC,CHN,CHN +2007,NL,CIN,CIN,C,5,162,,72,90,N,N,N,N,783,5607,1496,293,23,204,536,1113,97,31,66,46,853,796,4.9400000000,6,7,34,4349,1605,198,482,1068,95,153,0.98,Cincinnati Reds,Great American Ball Park,2058593,104,104,CIN,CIN,CIN +2007,NL,COL,COL,W,2,163,,90,73,N,Y,Y,N,860,5691,1591,313,36,171,622,1152,100,31,58,44,758,706,4.3200000000,4,7,39,4416,1497,164,504,967,68,179,0.98,Colorado Rockies,Coors Field,2376250,107,108,COL,COL,COL +2007,NL,FLO,FLA,E,5,162,,71,91,N,N,N,N,790,5627,1504,340,38,201,521,1332,105,34,82,42,891,793,4.9400000000,0,4,40,4331,1617,176,661,1142,137,159,0.97,Florida Marlins,Dolphin Stadium,1370511,97,98,FLA,FLO,FLO +2007,NL,HOU,HOU,C,4,162,,73,89,N,N,N,N,723,5605,1457,293,30,167,547,1043,65,33,55,40,813,761,4.6800000000,2,6,38,4394,1566,206,510,1109,103,128,0.98,Houston Astros,Minute Maid Park,3020405,100,100,HOU,HOU,HOU +2007,NL,LAN,LAD,W,4,162,,82,80,N,N,N,N,735,5613,1544,276,35,129,511,864,137,50,41,55,727,677,4.2000000000,4,6,43,4350,1443,146,518,1184,114,160,0.98,Los Angeles Dodgers,Dodger Stadium,3857036,101,100,LAD,LAN,LAN +2007,NL,MIL,MIL,C,2,162,,83,79,N,N,N,N,801,5554,1455,310,37,231,501,1137,96,32,76,47,776,708,4.4100000000,3,6,49,4333,1513,161,507,1174,109,143,0.98,Milwaukee Brewers,Miller Park,2869144,100,100,MIL,ML4,MIL +2007,NL,NYN,NYM,E,2,162,,88,74,N,N,N,N,804,5605,1543,294,27,177,549,981,200,46,54,58,750,687,4.2600000000,2,10,39,4357,1415,165,570,1134,101,124,0.98,New York Mets,Shea Stadium,3853955,98,97,NYM,NYN,NYN +2007,NL,PHI,PHI,E,1,162,,89,73,Y,N,N,N,892,5688,1558,326,41,213,641,1205,138,19,90,52,821,767,4.7300000000,5,5,42,4375,1555,198,558,1050,89,164,0.98,Philadelphia Phillies,Citizens Bank Park,3108325,104,103,PHI,PHI,PHI +2007,NL,PIT,PIT,C,6,162,,68,94,N,N,N,N,724,5569,1463,322,31,148,463,1135,68,30,71,51,846,793,4.9300000000,4,5,32,4343,1627,174,518,997,83,189,0.98,Pittsburgh Pirates,PNC Park,1749142,97,98,PIT,PIT,PIT +2007,NL,SDN,SDP,W,3,163,,89,74,N,N,N,N,741,5612,1408,322,31,171,557,1229,55,24,49,44,666,611,3.7000000000,1,20,45,4454,1406,119,474,1136,92,147,0.98,San Diego Padres,Petco Park,2790074,90,90,SDP,SDN,SDN +2007,NL,SFN,SFG,W,5,162,,71,91,N,N,N,N,683,5538,1407,267,37,131,532,907,119,33,39,36,720,677,4.1900000000,5,10,37,4361,1442,133,593,1057,88,146,0.98,San Francisco Giants,AT&T Park,3223215,101,101,SFG,SFN,SFN +2007,NL,SLN,STL,C,3,162,,78,84,N,N,N,N,725,5529,1513,279,13,141,506,909,56,33,54,54,829,741,4.6500000000,2,8,34,4307,1514,168,509,945,121,155,0.98,St. Louis Cardinals,Busch Stadium III,3552180,99,99,STL,SLN,SLN +2007,NL,WAS,WSN,E,4,162,,73,89,N,N,N,N,673,5520,1415,309,31,123,524,1128,69,23,53,41,783,736,4.5800000000,0,6,46,4340,1502,187,580,931,109,151,0.98,Washington Nationals,R.F.K. Stadium,1943812,94,95,WSN,MON,WAS +2008,AL,BAL,BAL,E,5,161,,68,93,N,N,N,N,782,5559,1486,322,30,172,533,990,81,37,42,48,869,810,5.1500000000,4,4,35,4266,1538,184,687,922,100,163,0.98,Baltimore Orioles,Oriole Park at Camden Yards,1950075,101,102,BAL,BAL,BAL +2008,AL,BOS,BOS,E,2,162,,95,67,N,Y,N,N,845,5596,1565,353,33,173,646,1068,120,35,70,62,694,645,4.0100000000,5,16,47,4339,1369,147,548,1185,85,147,0.98,Boston Red Sox,Fenway Park II,3048250,108,106,BOS,BOS,BOS +2008,AL,CHA,CHW,C,1,163,,89,74,Y,N,N,N,811,5553,1458,296,13,235,540,1016,67,34,63,47,729,658,4.1100000000,4,10,34,4373,1471,156,460,1147,108,154,0.98,Chicago White Sox,U.S. Cellular Field,2500648,105,105,CHW,CHA,CHA +2008,AL,CLE,CLE,C,3,162,,81,81,N,N,N,N,805,5543,1455,339,22,171,560,1213,77,29,103,49,761,711,4.4600000000,10,13,31,4311,1530,170,444,986,94,183,0.98,Cleveland Indians,Jacobs Field,2169760,98,98,CLE,CLE,CLE +2008,AL,DET,DET,C,5,162,,74,88,N,N,N,N,821,5641,1529,293,41,200,572,1076,63,31,44,44,857,786,4.9100000000,1,2,34,4335,1541,172,644,991,113,172,0.98,Detroit Tigers,Comerica Park,3202645,103,103,DET,DET,DET +2008,AL,KCA,KCR,C,4,162,,75,87,N,N,N,N,691,5608,1507,303,28,120,392,1005,79,38,50,36,781,720,4.5000000000,2,8,44,4337,1473,159,515,1085,96,159,0.98,Kansas City Royals,Kauffman Stadium,1578922,98,100,KCR,KCA,KCA +2008,AL,LAA,ANA,W,1,162,,100,62,Y,N,N,N,765,5540,1486,274,25,159,481,987,129,48,52,50,697,644,4.0000000000,7,10,66,4354,1455,160,457,1106,91,159,0.98,Los Angeles Angels of Anaheim,Angel Stadium,3336747,103,102,LAA,ANA,ANA +2008,AL,MIN,MIN,C,2,163,,88,75,N,N,N,N,829,5641,1572,298,49,111,529,979,102,42,36,72,745,675,4.1800000000,5,10,42,4377,1568,183,406,995,108,168,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2302431,96,96,MIN,MIN,MIN +2008,AL,NYA,NYY,E,3,162,,89,73,N,N,N,N,789,5572,1512,289,20,180,535,1015,118,39,80,39,727,685,4.2800000000,1,11,42,4325,1478,143,489,1141,83,141,0.98,New York Yankees,Yankee Stadium II,4298655,103,102,NYY,NYA,NYA +2008,AL,OAK,OAK,W,3,161,,75,86,N,N,N,N,646,5451,1318,270,23,125,574,1226,88,21,48,35,690,640,4.0100000000,4,7,33,4305,1364,135,576,1061,98,169,0.98,Oakland Athletics,McAfee Coliseum,1665256,95,95,OAK,OAK,OAK +2008,AL,SEA,SEA,W,4,162,,61,101,N,N,N,N,671,5643,1498,285,20,124,417,890,90,32,38,42,811,754,4.7300000000,4,4,36,4306,1544,161,626,1016,99,159,0.98,Seattle Mariners,Safeco Field,2329702,97,97,SEA,SEA,SEA +2008,AL,TBA,TBD,E,1,162,,97,65,Y,N,Y,N,774,5541,1443,284,37,180,626,1224,142,50,68,52,671,618,3.8200000000,7,12,52,4373,1349,166,526,1143,90,153,0.98,Tampa Bay Rays,Tropicana Field,1811986,101,101,TBR,TBA,TBA +2008,AL,TEX,TEX,W,2,162,,79,83,N,N,N,N,901,5728,1619,376,35,194,595,1207,81,25,63,54,967,860,5.3700000000,6,8,36,4326,1647,176,625,963,132,191,0.97,Texas Rangers,Rangers Ballpark in Arlington,1945677,102,102,TEX,TEX,TEX +2008,AL,TOR,TOR,E,4,162,,86,76,N,N,N,N,714,5503,1453,303,32,126,521,938,80,27,59,56,610,561,3.4900000000,15,13,44,4340,1330,134,467,1184,84,137,0.98,Toronto Blue Jays,Rogers Centre,2399786,98,97,TOR,TOR,TOR +2008,NL,ARI,ARI,W,2,162,,82,80,N,N,N,N,720,5409,1355,318,47,159,587,1287,58,23,49,43,706,635,3.9900000000,6,9,39,4304,1403,147,451,1229,113,136,0.98,Arizona Diamondbacks,Chase Field,2509924,108,108,ARI,ARI,ARI +2008,NL,ATL,ATL,E,4,162,,72,90,N,N,N,N,753,5604,1514,316,33,130,618,1023,58,27,42,34,778,714,4.4700000000,2,7,26,4322,1439,156,586,1076,107,149,0.98,Atlanta Braves,Turner Field,2532834,98,98,ATL,ATL,ATL +2008,NL,CHN,CHC,C,1,161,,97,64,Y,N,N,N,855,5588,1552,329,21,184,636,1186,87,34,50,45,671,624,3.8700000000,2,8,44,4352,1329,160,548,1264,99,118,0.98,Chicago Cubs,Wrigley Field,3300200,108,107,CHC,CHN,CHN +2008,NL,CIN,CIN,C,5,162,,74,88,N,N,N,N,704,5465,1351,269,24,187,560,1125,85,47,50,41,800,729,4.5500000000,2,6,34,4327,1542,201,557,1227,114,155,0.98,Cincinnati Reds,Great American Ball Park,2058632,102,103,CIN,CIN,CIN +2008,NL,COL,COL,W,3,162,,74,88,N,N,N,N,747,5557,1462,310,28,160,570,1209,141,37,57,38,822,766,4.7700000000,3,8,36,4338,1547,148,562,1041,96,176,0.98,Colorado Rockies,Coors Field,2650218,109,109,COL,COL,COL +2008,NL,FLO,FLA,E,3,161,,84,77,N,N,N,N,770,5499,1397,302,28,208,543,1371,76,28,69,46,767,707,4.4400000000,2,8,36,4306,1421,161,586,1127,117,122,0.98,Florida Marlins,Dolphin Stadium,1335076,101,101,FLA,FLO,FLO +2008,NL,HOU,HOU,C,3,161,,86,75,N,N,N,N,712,5451,1432,284,22,167,449,1051,114,52,52,41,743,691,4.3900000000,4,13,48,4276,1453,197,492,1095,67,141,0.98,Houston Astros,Minute Maid Park,2779487,98,98,HOU,HOU,HOU +2008,NL,LAN,LAD,W,1,162,,84,78,Y,N,N,N,700,5506,1455,271,29,137,543,1032,126,43,43,38,648,591,3.6800000000,5,11,35,4342,1381,123,480,1205,101,137,0.98,Los Angeles Dodgers,Dodger Stadium,3730553,98,97,LAD,LAN,LAN +2008,NL,MIL,MIL,C,2,162,,90,72,N,Y,N,N,750,5535,1398,324,35,198,550,1203,108,38,69,43,689,623,3.8700000000,12,10,45,4367,1415,175,528,1110,101,160,0.98,Milwaukee Brewers,Miller Park,3068458,98,98,MIL,ML4,MIL +2008,NL,NYN,NYM,E,2,162,,89,73,N,N,N,N,799,5606,1491,274,38,172,619,1024,138,36,39,49,715,662,4.0700000000,5,12,43,4393,1415,163,590,1181,83,125,0.98,New York Mets,Shea Stadium,4042045,99,98,NYM,NYN,NYN +2008,NL,PHI,PHI,E,1,162,,92,70,Y,N,Y,Y,799,5509,1407,291,36,214,586,1117,136,25,67,40,680,625,3.8900000000,4,11,47,4349,1444,160,533,1081,90,142,0.98,Philadelphia Phillies,Citizens Bank Park,3422583,103,102,PHI,PHI,PHI +2008,NL,PIT,PIT,C,6,162,,67,95,N,N,N,N,735,5628,1454,314,21,153,474,1039,57,19,59,51,884,822,5.1000000000,3,7,34,4365,1631,176,657,963,107,178,0.98,Pittsburgh Pirates,PNC Park,1609076,96,98,PIT,PIT,PIT +2008,NL,SDN,SDP,W,5,162,,63,99,N,N,N,N,637,5568,1390,264,27,154,518,1259,36,17,53,46,764,714,4.4100000000,3,6,30,4375,1466,165,561,1100,85,148,0.98,San Diego Padres,Petco Park,2427535,88,88,SDP,SDN,SDN +2008,NL,SFN,SFG,W,4,162,,72,90,N,N,N,N,640,5543,1452,311,37,94,452,1044,108,46,48,44,759,701,4.3800000000,4,12,41,4326,1416,147,652,1240,96,130,0.98,San Francisco Giants,AT&T Park,2863837,102,103,SFG,SFN,SFN +2008,NL,SLN,STL,C,4,162,,86,76,N,N,N,N,779,5636,1585,283,26,174,577,985,73,32,42,44,725,677,4.2000000000,2,7,42,4362,1517,163,496,957,85,156,0.98,St. Louis Cardinals,Busch Stadium III,3432917,99,99,STL,SLN,SLN +2008,NL,WAS,WSN,E,5,161,,59,102,N,N,N,N,641,5491,1376,269,26,117,534,1095,81,43,67,36,825,742,4.6600000000,2,8,28,4302,1496,190,588,1063,123,141,0.98,Washington Nationals,Nationals Park,2320400,99,100,WSN,MON,WAS +2009,AL,BAL,BAL,E,5,162,,64,98,N,N,N,N,741,5618,1508,307,19,160,517,1013,76,37,39,46,876,817,5.1600000000,2,3,31,4287,1633,218,546,933,108,151,0.98,Baltimore Orioles,Oriole Park at Camden Yards,1907163,101,102,BAL,BAL,BAL +2009,AL,BOS,BOS,E,2,162,,95,67,N,Y,N,N,872,5543,1495,335,25,212,659,1120,126,39,70,51,736,695,4.3500000000,8,11,41,4310,1494,167,530,1230,92,119,0.98,Boston Red Sox,Fenway Park II,3062699,106,105,BOS,BOS,BOS +2009,AL,CHA,CHW,C,3,162,,79,83,N,N,N,N,724,5463,1410,246,20,184,534,1022,113,49,62,39,732,663,4.1600000000,4,11,36,4319,1438,169,507,1119,128,156,0.98,Chicago White Sox,U.S. Cellular Field,2284163,105,105,CHW,CHA,CHA +2009,AL,CLE,CLE,C,4,162,,65,97,N,N,N,N,773,5568,1468,314,28,161,582,1211,84,31,81,50,865,806,5.0700000000,5,6,25,4302,1570,183,598,986,114,169,0.98,Cleveland Indians,Jacobs Field,1766242,95,95,CLE,CLE,CLE +2009,AL,DET,DET,C,2,163,,86,77,N,N,N,N,743,5540,1443,245,35,183,540,1114,72,33,61,39,745,690,4.3400000000,4,9,42,4341,1449,182,594,1102,106,164,0.98,Detroit Tigers,Comerica Park,2567165,101,102,DET,DET,DET +2009,AL,KCA,KCR,C,4,162,,65,97,N,N,N,N,686,5532,1432,276,51,144,457,1091,88,29,42,32,842,765,4.8300000000,10,9,34,4278,1486,166,600,1153,127,159,0.98,Kansas City Royals,Kauffman Stadium,1797891,97,99,KCR,KCA,KCA +2009,AL,LAA,ANA,W,1,162,,97,65,Y,N,N,N,883,5622,1604,293,33,173,547,1054,148,63,41,52,761,715,4.4500000000,9,13,51,4335,1513,180,523,1062,99,174,0.98,Los Angeles Angels of Anaheim,Angel Stadium,3240386,99,98,LAA,ANA,ANA +2009,AL,MIN,MIN,C,1,163,,87,76,Y,N,N,N,817,5608,1539,271,40,172,585,1021,85,32,45,57,765,726,4.5000000000,4,7,48,4359,1542,185,466,1052,89,133,0.98,Minnesota Twins,Hubert H Humphrey Metrodome,2416237,99,98,MIN,MIN,MIN +2009,AL,NYA,NYY,E,1,162,,103,59,Y,N,Y,Y,915,5660,1604,325,21,244,663,1014,111,28,54,39,753,687,4.2800000000,3,8,51,4350,1386,181,574,1260,101,131,0.98,New York Yankees,Yankee Stadium III,3719358,105,103,NYY,NYA,NYA +2009,AL,OAK,OAK,W,4,162,,75,87,N,N,N,N,759,5584,1464,307,21,135,527,1046,133,48,50,54,761,685,4.2900000000,2,10,38,4342,1486,156,523,1124,121,153,0.98,Oakland Athletics,Oakland-Alameda Country Coliseum,1408783,99,99,OAK,OAK,OAK +2009,AL,SEA,SEA,W,3,162,,85,77,N,N,N,N,640,5543,1430,280,19,160,421,1093,89,33,49,44,692,625,3.8700000000,4,10,49,4358,1359,172,534,1043,120,150,0.98,Seattle Mariners,Safeco Field,2195533,94,96,SEA,SEA,SEA +2009,AL,TBA,TBD,E,3,162,,84,78,N,N,N,N,803,5462,1434,297,36,199,642,1229,194,61,49,45,754,686,4.3600000000,3,5,41,4282,1421,183,515,1125,111,135,0.98,Tampa Bay Rays,Tropicana Field,1874962,98,97,TBR,TBA,TBA +2009,AL,TEX,TEX,W,2,162,,87,75,N,N,N,N,784,5526,1436,296,27,224,472,1253,149,36,37,51,740,698,4.3800000000,8,11,45,4304,1432,171,531,1016,120,166,0.98,Texas Rangers,Rangers Ballpark in Arlington,2156016,104,104,TEX,TEX,TEX +2009,AL,TOR,TOR,E,4,162,,75,87,N,N,N,N,798,5696,1516,339,13,209,548,1028,73,23,45,49,771,720,4.4700000000,10,10,25,4353,1509,181,551,1181,88,167,0.98,Toronto Blue Jays,Rogers Centre,1876129,100,99,TOR,TOR,TOR +2009,NL,ARI,ARI,W,5,162,,70,92,N,N,N,N,720,5565,1408,307,45,173,571,1298,102,40,37,41,782,711,4.4400000000,4,12,36,4343,1470,168,525,1158,151,132,0.97,Arizona Diamondbacks,Chase Field,2128765,105,106,ARI,ARI,ARI +2009,NL,ATL,ATL,E,3,162,,86,76,N,N,N,N,735,5539,1459,300,20,149,602,1064,58,26,52,47,641,581,3.5700000000,3,10,38,4388,1399,119,530,1232,107,158,0.98,Atlanta Braves,Turner Field,2373631,99,98,ATL,ATL,ATL +2009,NL,CHN,CHC,C,2,161,,83,78,N,N,N,N,707,5486,1398,293,29,161,592,1185,56,34,59,42,672,616,3.8400000000,3,8,40,4336,1329,160,586,1272,127,144,0.98,Chicago Cubs,Wrigley Field,3168859,107,106,CHC,CHN,CHN +2009,NL,CIN,CIN,C,4,162,,78,84,N,N,N,N,673,5462,1349,280,25,158,531,1129,96,40,53,41,723,677,4.1800000000,6,12,41,4375,1420,188,577,1069,104,161,0.98,Cincinnati Reds,Great American Ball Park,1747919,100,100,CIN,CIN,CIN +2009,NL,COL,COL,W,2,162,,92,70,N,Y,N,N,804,5398,1408,300,50,190,660,1277,106,55,47,60,715,675,4.2400000000,5,7,45,4315,1427,141,528,1154,103,144,0.98,Colorado Rockies,Coors Field,2665080,112,112,COL,COL,COL +2009,NL,FLO,FLA,E,2,162,,87,75,N,N,N,N,772,5572,1493,296,25,159,568,1226,75,35,63,39,766,690,4.3200000000,5,5,45,4339,1425,160,601,1248,118,129,0.98,Florida Marlins,Dolphin Stadium,1464109,102,102,FLA,FLO,FLO +2009,NL,HOU,HOU,C,5,162,,74,88,N,N,N,N,643,5436,1415,270,32,142,448,990,113,44,43,45,770,722,4.5400000000,5,10,39,4290,1521,176,546,1144,88,161,0.98,Houston Astros,Minute Maid Park,2521076,98,98,HOU,HOU,HOU +2009,NL,LAN,LAD,W,1,162,,95,67,Y,N,N,N,780,5592,1511,278,39,145,607,1068,116,48,63,44,611,558,3.4100000000,1,9,44,4420,1265,127,584,1272,97,134,0.98,Los Angeles Dodgers,Dodger Stadium,3761655,96,95,LAD,LAN,LAN +2009,NL,MIL,MIL,C,3,162,,80,82,N,N,N,N,785,5510,1447,281,37,182,610,1231,68,37,71,47,818,770,4.8400000000,1,8,44,4305,1498,207,607,1104,111,150,0.98,Milwaukee Brewers,Miller Park,3037451,98,98,MIL,ML4,MIL +2009,NL,NYN,NYM,E,4,162,,70,92,N,N,N,N,671,5453,1472,295,49,95,526,928,122,44,36,55,757,705,4.4600000000,3,12,39,4278,1452,158,616,1031,108,134,0.98,New York Mets,Citi Field,3168571,97,97,NYM,NYN,NYN +2009,NL,PHI,PHI,E,1,162,,93,69,Y,N,Y,N,820,5578,1439,312,35,224,589,1155,119,28,71,45,709,673,4.1600000000,8,9,44,4367,1479,189,489,1153,86,132,0.98,Philadelphia Phillies,Citizens Bank Park,3600693,101,100,PHI,PHI,PHI +2009,NL,PIT,PIT,C,6,161,,62,99,N,N,N,N,636,5417,1364,289,34,125,499,1142,90,32,46,36,768,723,4.5900000000,5,7,28,4255,1491,152,563,919,80,169,0.98,Pittsburgh Pirates,PNC Park,1577853,98,99,PIT,PIT,PIT +2009,NL,SDN,SDP,W,4,162,,75,87,N,N,N,N,638,5425,1315,265,31,141,586,1182,82,29,57,36,769,704,4.3700000000,2,9,45,4352,1422,167,603,1187,109,144,0.98,San Diego Padres,Petco Park,1919603,90,90,SDP,SDN,SDN +2009,NL,SFN,SFG,W,3,162,,88,74,N,N,N,N,657,5493,1411,275,43,122,392,1158,78,28,50,55,611,571,3.5500000000,11,18,41,4338,1268,140,584,1302,99,138,0.98,San Francisco Giants,AT&T Park,2862110,102,102,SFG,SFN,SFN +2009,NL,SLN,STL,C,1,162,,91,71,Y,N,N,N,730,5465,1436,294,29,160,528,1041,75,31,61,43,640,586,3.6600000000,8,11,43,4322,1407,123,460,1049,113,167,0.98,St. Louis Cardinals,Busch Stadium III,3343252,98,97,STL,SLN,SLN +2009,NL,WAS,WSN,E,5,162,,59,103,N,N,N,N,710,5493,1416,271,38,156,617,1208,73,40,56,42,874,791,5.0200000000,6,3,33,4273,1533,173,629,911,170,154,0.97,Washington Nationals,Nationals Park,1817226,99,101,WSN,MON,WAS +2010,AL,BAL,BAL,E,5,162,,66,96,N,N,N,N,613,5554,1440,264,21,133,424,1056,76,34,54,45,785,733,4.5900000000,3,7,35,4309,1508,186,520,1007,123,141,0.98,Baltimore Orioles,Oriole Park at Camden Yards,,101,102,BAL,BAL,BAL +2010,AL,BOS,BOS,E,3,162,,89,73,N,N,N,N,818,5646,1511,358,22,211,587,1140,68,17,47,46,744,679,4.2000000000,3,9,44,4370,1402,152,580,1207,127,132,0.98,Boston Red Sox,Fenway Park II,,106,105,BOS,BOS,BOS +2010,AL,CHA,CHW,C,2,162,,88,74,N,N,N,N,752,5484,1467,263,21,177,467,922,160,74,79,38,704,658,4.0900000000,6,11,43,4339,1471,136,490,1149,120,157,0.98,Chicago White Sox,U.S. Cellular Field,,105,105,CHW,CHA,CHA +2010,AL,CLE,CLE,C,4,162,,69,93,N,N,N,N,646,5487,1362,290,20,128,545,1184,91,33,64,33,752,684,4.3000000000,10,4,34,4299,1477,147,572,967,126,179,0.98,Cleveland Indians,Jacobs Field,,93,93,CLE,CLE,CLE +2010,AL,DET,DET,C,3,162,,81,81,N,N,N,N,751,5643,1515,308,32,152,546,1147,69,30,41,41,743,690,4.3000000000,6,5,32,4333,1445,142,537,1056,136,171,0.98,Detroit Tigers,Comerica Park,,101,101,DET,DET,DET +2010,AL,KCA,KCR,C,5,162,,67,95,N,N,N,N,676,5604,1534,279,31,121,471,905,115,50,35,53,845,794,4.9700000000,7,3,44,4310,1553,176,551,1035,138,138,0.98,Kansas City Royals,Kauffman Stadium,,99,101,KCR,KCA,KCA +2010,AL,LAA,ANA,W,3,162,,80,82,N,N,N,N,681,5488,1363,276,19,155,466,1070,104,52,52,37,702,651,4.0400000000,10,9,39,4348,1422,148,565,1130,131,116,0.98,Los Angeles Angels of Anaheim,Angel Stadium,,98,98,LAA,ANA,ANA +2010,AL,MIN,MIN,C,1,162,,94,68,Y,N,N,N,781,5568,1521,318,41,142,559,967,68,28,39,53,671,638,3.9500000000,9,13,40,4358,1493,155,383,1048,94,149,0.98,Minnesota Twins,Target Field,,101,100,MIN,MIN,MIN +2010,AL,NYA,NYY,E,2,162,,95,67,N,Y,N,N,859,5567,1485,275,32,201,662,1136,103,30,73,44,693,651,4.0600000000,3,8,39,4327,1349,179,540,1154,79,161,0.98,New York Yankees,Yankee Stadium III,,105,103,NYY,NYA,NYA +2010,AL,OAK,OAK,W,2,162,,81,81,N,N,N,N,663,5448,1396,276,30,109,527,1061,156,38,47,51,626,566,3.5800000000,7,17,38,4295,1315,153,512,1070,110,146,0.98,Oakland Athletics,Oakland-Alameda Country Coliseum,,100,100,OAK,OAK,OAK +2010,AL,SEA,SEA,W,4,162,,61,101,N,N,N,N,513,5409,1274,227,16,101,459,1184,142,39,39,40,698,628,3.9500000000,11,10,38,4314,1402,157,452,973,122,146,0.98,Seattle Mariners,Safeco Field,,93,95,SEA,SEA,SEA +2010,AL,TBA,TBD,E,1,162,,96,66,Y,N,N,N,802,5439,1343,295,37,160,672,1292,172,47,57,57,649,611,3.7800000000,6,12,51,4361,1347,175,478,1189,95,134,0.98,Tampa Bay Rays,Tropicana Field,,96,95,TBR,TBA,TBA +2010,AL,TEX,TEX,W,1,162,,90,72,Y,N,Y,N,787,5635,1556,268,25,162,511,986,123,48,45,54,687,636,3.9300000000,7,8,46,4366,1355,162,551,1181,123,132,0.98,Texas Rangers,Rangers Ballpark in Arlington,,105,104,TEX,TEX,TEX +2010,AL,TOR,TOR,E,4,162,,85,77,N,N,N,N,755,5495,1364,319,21,257,471,1164,58,20,55,34,728,676,4.2300000000,5,11,45,4322,1407,150,539,1184,102,172,0.98,Toronto Blue Jays,Rogers Centre,,100,100,TOR,TOR,TOR +2010,NL,ARI,ARI,W,5,162,,65,97,N,N,N,N,713,5473,1366,301,34,180,589,1529,86,41,39,41,836,765,4.8100000000,3,3,35,4296,1503,210,548,1070,121,152,0.98,Arizona Diamondbacks,Chase Field,,104,105,ARI,ARI,ARI +2010,NL,ATL,ATL,E,2,162,,91,71,N,Y,N,N,738,5463,1411,312,25,139,634,1140,63,29,51,35,629,569,3.5700000000,2,9,41,4318,1326,126,505,1241,145,165,0.98,Atlanta Braves,Turner Field,,98,97,ATL,ATL,ATL +2010,NL,CHN,CHC,C,5,162,,75,87,N,N,N,N,685,5512,1414,298,27,149,479,1236,55,31,50,38,767,668,4.2400000000,1,14,40,4310,1409,154,605,1268,144,135,0.98,Chicago Cubs,Wrigley Field,,108,108,CHC,CHN,CHN +2010,NL,CIN,CIN,C,1,162,,91,71,Y,N,N,N,790,5579,1515,293,30,188,522,1218,93,43,68,50,685,648,4.0200000000,4,9,43,4359,1404,158,524,1130,86,140,0.98,Cincinnati Reds,Great American Ball Park,,99,99,CIN,CIN,CIN +2010,NL,COL,COL,W,3,162,,83,79,N,N,N,N,770,5530,1452,270,54,173,585,1274,99,42,47,47,717,663,4.1400000000,6,12,35,4326,1405,139,525,1234,113,182,0.98,Colorado Rockies,Coors Field,,115,115,COL,COL,COL +2010,NL,FLO,FLA,E,3,162,,80,82,N,N,N,N,719,5531,1403,294,37,152,514,1375,92,26,55,43,717,652,4.0900000000,5,17,39,4315,1433,134,549,1168,141,130,0.98,Florida Marlins,Dolphin Stadium,,105,104,FLA,FLO,FLO +2010,NL,HOU,HOU,C,4,162,,76,86,N,N,N,N,611,5452,1348,252,25,108,415,1025,100,36,33,29,729,654,4.0900000000,4,11,45,4318,1446,140,548,1210,118,135,0.98,Houston Astros,Minute Maid Park,,95,96,HOU,HOU,HOU +2010,NL,LAN,LAD,W,4,162,,80,82,N,N,N,N,667,5426,1368,270,29,120,533,1184,92,50,46,50,692,643,4.0100000000,4,16,41,4325,1323,134,539,1274,114,122,0.98,Los Angeles Dodgers,Dodger Stadium,,95,95,LAD,LAN,LAN +2010,NL,MIL,MIL,C,3,162,,77,85,N,N,N,N,750,5606,1471,293,33,182,546,1216,81,26,81,35,804,733,4.5900000000,3,7,35,4317,1487,173,582,1258,115,141,0.98,Milwaukee Brewers,Miller Park,,98,98,MIL,ML4,MIL +2010,NL,NYN,NYM,E,4,162,,79,83,N,N,N,N,656,5465,1361,266,40,128,502,1095,130,44,46,57,652,597,3.7300000000,8,19,36,4359,1438,135,545,1106,96,160,0.98,New York Mets,Citi Field,,97,97,NYM,NYN,NYN +2010,NL,PHI,PHI,E,1,162,,97,65,Y,N,N,N,772,5581,1451,290,34,166,560,1064,108,21,63,43,640,594,3.6800000000,14,21,40,4369,1402,168,416,1183,93,156,0.98,Philadelphia Phillies,Citizens Bank Park,,101,100,PHI,PHI,PHI +2010,NL,PIT,PIT,C,6,162,,57,105,N,N,N,N,587,5386,1303,276,27,126,463,1207,87,36,33,33,866,784,5.0000000000,1,6,31,4235,1567,167,538,1026,142,119,0.98,Pittsburgh Pirates,PNC Park,,99,101,PIT,PIT,PIT +2010,NL,SDN,SDP,W,2,162,,90,72,N,N,N,N,665,5434,1338,236,24,132,538,1183,124,50,50,46,581,549,3.4100000000,2,20,49,4369,1305,139,517,1295,85,142,0.98,San Diego Padres,Petco Park,,91,91,SDP,SDN,SDN +2010,NL,SFN,SFG,W,1,162,,92,70,Y,N,Y,Y,697,5488,1411,284,30,162,487,1099,55,32,50,41,583,546,3.3600000000,6,17,57,4383,1279,134,578,1331,80,110,0.98,San Francisco Giants,AT&T Park,,101,101,SFG,SFN,SFN +2010,NL,SLN,STL,C,2,162,,86,76,N,N,N,N,736,5542,1456,285,18,150,541,1027,79,41,50,40,641,577,3.5700000000,7,16,32,4361,1412,133,477,1094,109,170,0.98,St. Louis Cardinals,Busch Stadium III,,97,97,STL,SLN,SLN +2010,NL,WAS,WSN,E,5,162,,69,93,N,N,N,N,655,5418,1355,250,31,149,503,1220,110,41,60,47,742,658,4.1300000000,2,5,37,4305,1469,151,512,1068,142,146,0.98,Washington Nationals,Nationals Park,,99,100,WSN,MON,WAS +2011,AL,BAL,BAL,E,5,162,,69,93,N,N,N,N,708,5585,1434,273,13,191,452,1120,81,25,52,43,860,786,4.9200000000,3,7,32,4340,1568,210,535,1044,110,159,0.98,Baltimore Orioles,Oriole Park at Camden Yards,1755461,96,97,BAL,BAL,BAL +2011,AL,BOS,BOS,E,3,162,,90,72,N,N,N,N,875,5710,1600,352,35,203,578,1108,102,42,50,50,737,680,4.2000000000,2,13,36,4372,1366,156,540,1213,92,120,0.99,Boston Red Sox,Fenway Park II,3054001,106,105,BOS,BOS,BOS +2011,AL,CHA,CHW,C,3,162,,79,83,N,N,N,N,654,5502,1387,252,16,154,475,989,81,53,84,46,706,665,4.1000000000,6,14,42,4380,1463,147,439,1220,79,128,0.99,Chicago White Sox,U.S. Cellular Field,2001117,99,100,CHW,CHA,CHA +2011,AL,CLE,CLE,C,2,162,,80,82,N,N,N,N,704,5509,1380,290,26,154,494,1269,89,42,65,43,760,683,4.2400000000,2,4,38,4360,1482,153,463,1024,110,131,0.98,Cleveland Indians,Jacobs Field,1840835,96,97,CLE,CLE,CLE +2011,AL,DET,DET,C,1,162,,95,67,Y,N,N,N,787,5563,1540,297,34,169,521,1143,49,20,39,58,711,647,4.0400000000,4,14,52,4320,1406,149,492,1115,103,146,0.98,Detroit Tigers,Comerica Park,2642045,103,102,DET,DET,DET +2011,AL,KCA,KCR,C,4,162,,71,91,N,N,N,N,730,5672,1560,325,41,129,442,1006,153,58,39,57,762,716,4.4500000000,2,6,37,4354,1487,163,557,1080,95,149,0.99,Kansas City Royals,Kauffman Stadium,1724450,101,101,KCR,KCA,KCA +2011,AL,LAA,ANA,W,2,162,,86,76,N,N,N,N,667,5513,1394,289,34,155,442,1086,135,52,51,32,633,581,3.5700000000,12,11,39,4395,1388,142,476,1058,93,157,0.99,Los Angeles Angels of Anaheim,Angel Stadium,3166321,93,93,LAA,ANA,ANA +2011,AL,MIN,MIN,C,5,162,,63,99,N,N,N,N,619,5487,1357,259,25,103,440,1048,92,39,37,25,804,724,4.6000000000,7,8,32,4265,1564,161,480,940,119,153,0.98,Minnesota Twins,Target Field,3168116,95,97,MIN,MIN,MIN +2011,AL,NYA,NYY,E,1,162,,97,65,Y,N,N,N,867,5518,1452,267,33,222,627,1138,147,46,74,51,657,605,3.7300000000,5,8,47,4375,1423,152,507,1222,102,140,0.98,New York Yankees,Yankee Stadium III,3653680,108,106,NYY,NYA,NYA +2011,AL,OAK,OAK,W,3,162,,74,88,N,N,N,N,645,5452,1330,280,29,114,509,1094,117,43,50,57,679,597,3.7100000000,6,12,39,4343,1380,136,519,1160,124,145,0.98,Oakland Athletics,Oakland-Alameda Country Coliseum,1476791,97,98,OAK,OAK,OAK +2011,AL,SEA,SEA,W,4,162,,67,95,N,N,N,N,556,5421,1263,253,22,109,435,1280,125,40,37,41,675,621,3.9100000000,12,10,39,4299,1369,145,436,1088,108,152,0.98,Seattle Mariners,Safeco Field,1939421,94,95,SEA,SEA,SEA +2011,AL,TBA,TBD,E,2,162,,91,71,N,Y,N,N,707,5436,1324,273,37,172,571,1193,155,62,73,35,614,577,3.5800000000,15,13,32,4347,1263,161,504,1143,73,139,0.99,Tampa Bay Rays,Tropicana Field,1529188,92,92,TBR,TBA,TBA +2011,AL,TEX,TEX,W,1,162,,96,66,Y,N,Y,N,855,5659,1599,310,32,210,475,930,143,45,39,49,677,607,3.7900000000,10,19,38,4324,1327,170,461,1179,114,162,0.98,Texas Rangers,Rangers Ballpark in Arlington,2946949,117,115,TEX,TEX,TEX +2011,AL,TOR,TOR,E,4,162,,81,81,N,N,N,N,743,5559,1384,285,34,186,525,1184,131,52,48,47,761,700,4.3300000000,7,10,33,4376,1433,179,540,1169,110,146,0.98,Toronto Blue Jays,Rogers Centre,1818103,104,104,TOR,TOR,TOR +2011,NL,ARI,ARI,W,1,162,,94,68,Y,N,N,N,731,5421,1357,293,37,172,531,1249,133,55,61,33,662,609,3.8000000000,5,12,58,4330,1414,159,442,1058,90,130,0.99,Arizona Diamondbacks,Chase Field,2105432,107,106,ARI,ARI,ARI +2011,NL,ATL,ATL,E,2,162,,89,73,N,N,N,N,641,5528,1345,244,16,173,504,1260,77,44,28,30,605,572,3.4900000000,3,16,52,4439,1332,125,521,1332,83,131,0.99,Atlanta Braves,Turner Field,2372940,98,98,ATL,ATL,ATL +2011,NL,CHN,CHC,C,5,162,,71,91,N,N,N,N,654,5549,1423,285,36,148,425,1202,69,23,59,35,756,690,4.3400000000,4,5,40,4303,1439,162,580,1224,134,128,0.98,Chicago Cubs,Wrigley Field,3017966,96,97,CHC,CHN,CHN +2011,NL,CIN,CIN,C,3,162,,79,83,N,N,N,N,735,5612,1438,264,19,183,535,1250,97,50,63,40,720,678,4.1600000000,4,5,39,4403,1414,185,539,1112,91,145,0.99,Cincinnati Reds,Great American Ball Park,2213588,107,106,CIN,CIN,CIN +2011,NL,COL,COL,W,4,162,,73,89,N,N,N,N,735,5544,1429,274,40,163,555,1201,118,42,57,44,774,713,4.4400000000,5,7,41,4343,1471,176,522,1118,98,156,0.98,Colorado Rockies,Coors Field,2909777,116,116,COL,COL,COL +2011,NL,FLO,FLA,E,5,162,,72,90,N,N,N,N,625,5508,1358,274,30,149,542,1244,95,41,51,42,702,640,3.9500000000,7,11,40,4379,1403,149,500,1218,93,126,0.99,Florida Marlins,Sun Life Stadium,1477462,99,100,FLA,FLO,FLO +2011,NL,HOU,HOU,C,6,162,,56,106,N,N,N,N,615,5598,1442,309,28,95,401,1164,118,33,46,37,796,719,4.5100000000,2,6,25,4305,1477,188,560,1191,116,139,0.98,Houston Astros,Minute Maid Park,2067016,102,104,HOU,HOU,HOU +2011,NL,LAN,LAD,W,3,161,,82,79,N,N,N,N,644,5436,1395,237,28,117,498,1087,126,40,45,43,612,563,3.5600000000,7,17,40,4296,1287,132,507,1265,85,121,0.99,Los Angeles Dodgers,Dodger Stadium,2935139,98,98,LAD,LAN,LAN +2011,NL,MIL,MIL,C,1,162,,96,66,Y,N,N,N,721,5447,1422,276,31,185,481,1083,94,31,56,44,638,582,3.6400000000,1,13,47,4325,1348,147,440,1257,111,131,0.98,Milwaukee Brewers,Miller Park,3071373,103,102,MIL,ML4,MIL +2011,NL,NYN,NYM,E,4,162,,77,85,N,N,N,N,718,5600,1477,309,39,108,571,1085,130,35,51,48,742,674,4.1900000000,6,9,43,4344,1482,147,514,1126,116,125,0.98,New York Mets,Citi Field,2352596,98,98,NYM,NYN,NYN +2011,NL,PHI,PHI,E,1,162,,102,60,Y,N,N,N,713,5579,1409,258,38,153,539,1024,96,24,56,38,529,495,3.0200000000,18,21,47,4431,1320,120,404,1299,74,134,0.99,Philadelphia Phillies,Citizens Bank Park,3680718,105,103,PHI,PHI,PHI +2011,NL,PIT,PIT,C,4,162,,72,90,N,N,N,N,610,5421,1325,277,35,107,489,1308,108,52,34,44,712,650,4.0500000000,5,11,43,4348,1513,152,535,1031,112,154,0.98,Pittsburgh Pirates,PNC Park,1940429,96,97,PIT,PIT,PIT +2011,NL,SDN,SDP,W,5,162,,71,91,N,N,N,N,593,5417,1284,247,42,91,501,1320,170,44,48,47,611,551,3.4300000000,0,10,44,4348,1324,125,521,1139,94,138,0.99,San Diego Padres,Petco Park,2143018,92,92,SDP,SDN,SDN +2011,NL,SFN,SFG,W,2,162,,86,76,N,N,N,N,570,5486,1327,282,24,121,448,1122,85,51,52,43,578,522,3.2100000000,3,12,52,4404,1260,96,559,1316,104,127,0.98,San Francisco Giants,AT&T Park,3387303,89,89,SFG,SFN,SFN +2011,NL,SLN,STL,C,2,162,,90,72,N,Y,Y,Y,762,5532,1513,308,22,162,542,978,57,39,44,40,692,608,3.7900000000,7,9,47,4386,1461,136,448,1098,116,167,0.98,St. Louis Cardinals,Busch Stadium III,3093954,95,94,STL,SLN,SLN +2011,NL,WAS,WSN,E,3,161,,80,81,N,N,N,N,624,5441,1319,257,22,154,470,1323,106,38,65,32,643,577,3.5800000000,3,10,49,4348,1403,129,477,1049,104,145,0.98,Washington Nationals,Nationals Park,1940478,100,100,WSN,MON,WAS +2012,AL,BAL,BAL,E,2,162,81,93,69,N,Y,N,N,712,5560,1375,270,16,214,480,1315,58,29,50,30,705,642,3.9000000000,1,1,55,4449,1433,184,481,1177,106,150,0.98,Baltimore Orioles,Oriole Park at Camden Yards,2102240,102,103,BAL,BAL,BAL +2012,AL,BOS,BOS,E,5,162,81,69,93,N,N,N,N,734,5604,1459,339,16,165,428,1197,97,31,45,55,806,754,4.7200000000,6,2,35,4329,1449,190,529,1176,101,159,0.98,Boston Red Sox,Fenway Park II,3043003,106,106,BOS,BOS,BOS +2012,AL,CHA,CHW,C,2,162,81,85,77,N,N,N,N,748,5518,1409,228,29,211,461,1203,109,43,65,36,676,646,4.0200000000,6,2,37,4337,1365,186,503,1246,70,154,0.99,Chicago White Sox,U.S. Cellular Field,1965955,106,106,CHW,CHA,CHA +2012,AL,CLE,CLE,C,4,162,81,68,94,N,N,N,N,667,5525,1385,266,24,136,555,1087,110,44,59,39,845,766,4.7900000000,2,1,43,4326,1503,174,543,1086,96,156,0.98,Cleveland Indians,Progressive Field,1603596,93,95,CLE,CLE,CLE +2012,AL,DET,DET,C,1,162,81,88,74,Y,N,Y,N,726,5476,1467,279,39,163,511,1103,59,23,57,39,670,596,3.7700000000,9,3,40,4292,1409,151,438,1318,99,127,0.98,Detroit Tigers,Comerica Park,3028033,104,103,DET,DET,DET +2012,AL,KCA,KCR,C,3,162,81,72,90,N,N,N,N,676,5636,1492,295,37,131,404,1032,132,38,42,41,746,693,4.3000000000,2,1,44,4354,1504,163,542,1177,113,169,0.98,Kansas City Royals,Kauffman Stadium,1739859,100,100,KCR,KCA,KCA +2012,AL,LAA,ANA,W,3,162,81,89,73,N,N,N,N,767,5536,1518,273,22,187,449,1113,134,33,47,41,699,640,4.0200000000,6,5,38,4300,1339,186,483,1157,98,138,0.98,Los Angeles Angels of Anaheim,Angel Stadium of Anaheim,3061770,92,92,LAA,ANA,ANA +2012,AL,MIN,MIN,C,5,162,81,66,96,N,N,N,N,701,5562,1448,270,30,131,505,1069,135,37,53,56,832,762,4.7700000000,3,1,35,4316,1536,198,465,943,107,187,0.98,Minnesota Twins,Target Field,2776354,97,99,MIN,MIN,MIN +2012,AL,NYA,NYY,E,1,162,81,95,67,Y,N,N,N,804,5524,1462,280,13,245,565,1176,93,27,62,49,668,618,3.8600000000,6,2,51,4336,1401,190,431,1318,74,135,0.99,New York Yankees,Yankee Stadium III,3542406,103,102,NYY,NYA,NYA +2012,AL,OAK,OAK,W,1,162,81,94,68,Y,N,N,N,713,5527,1315,267,32,195,550,1387,122,32,45,34,614,569,3.5000000000,1,0,47,4410,1360,147,462,1136,111,136,0.98,Oakland Athletics,O.co Coliseum,1679013,97,97,OAK,OAK,OAK +2012,AL,SEA,SEA,W,4,162,81,75,87,N,N,N,N,619,5494,1285,241,27,149,466,1259,104,35,30,35,651,608,3.7600000000,8,6,43,4370,1359,166,449,1166,72,153,0.99,Seattle Mariners,Safeco Field,1721920,90,91,SEA,SEA,SEA +2012,AL,TBA,TBD,E,3,162,81,90,72,N,N,N,N,697,5398,1293,250,30,175,571,1323,134,44,58,42,577,518,3.1900000000,7,4,50,4379,1233,139,469,1383,114,154,0.98,Tampa Bay Rays,Tropicana Field,1559681,94,93,TBR,TBA,TBA +2012,AL,TEX,TEX,W,2,162,81,93,69,N,Y,N,N,808,5590,1526,303,32,200,478,1103,91,44,57,53,707,639,4.0200000000,7,2,43,4326,1378,175,446,1286,85,136,0.99,Texas Rangers,Rangers Ballpark in Arlington,3460280,112,111,TEX,TEX,TEX +2012,AL,TOR,TOR,E,4,162,81,73,89,N,N,N,N,716,5487,1346,247,22,198,473,1251,123,41,55,45,784,745,4.6400000000,5,4,29,4331,1439,204,574,1142,101,168,0.98,Toronto Blue Jays,Rogers Centre,2099663,103,104,TOR,TOR,TOR +2012,NL,ARI,ARI,W,3,162,81,81,81,N,N,N,N,734,5462,1416,307,33,165,539,1266,93,51,41,45,688,626,3.9400000000,4,2,39,4301,1432,155,417,1200,90,144,0.99,Arizona Diamondbacks,Chase Field,2177617,105,106,ARI,ARI,ARI +2012,NL,ATL,ATL,E,2,162,81,94,68,N,Y,N,N,700,5425,1341,263,30,149,567,1289,101,32,34,46,600,549,3.4200000000,5,4,47,4336,1310,145,464,1232,86,146,0.99,Atlanta Braves,Turner Field,2420171,102,101,ATL,ATL,ATL +2012,NL,CHN,CHC,C,5,162,81,61,101,N,N,N,N,613,5411,1297,265,36,137,447,1235,94,45,43,24,759,708,4.5100000000,1,0,28,4241,1399,175,573,1128,105,148,0.98,Chicago Cubs,Wrigley Field,2882756,98,99,CHC,CHN,CHN +2012,NL,CIN,CIN,C,1,162,81,97,65,Y,N,N,N,669,5477,1377,296,30,172,481,1266,87,27,47,37,588,540,3.3400000000,9,2,56,4359,1356,152,427,1248,89,113,0.99,Cincinnati Reds,Great American Ball Park,2347251,107,107,CIN,CIN,CIN +2012,NL,COL,COL,W,5,162,81,64,98,N,N,N,N,758,5577,1526,306,52,166,450,1213,100,40,36,39,890,824,5.2200000000,0,0,36,4266,1637,198,566,1144,122,138,0.98,Colorado Rockies,Coors Field,2630458,120,121,COL,COL,COL +2012,NL,HOU,HOU,C,6,162,81,55,107,N,N,N,N,583,5407,1276,238,28,146,463,1365,105,46,58,30,794,721,4.5700000000,3,2,31,4270,1493,173,540,1170,118,131,0.98,Houston Astros,Minute Maid Park,1607733,99,101,HOU,HOU,HOU +2012,NL,LAN,LAD,W,2,162,81,86,76,N,N,N,N,637,5438,1369,269,23,116,481,1156,104,44,52,38,597,538,3.3500000000,2,2,40,4349,1277,122,539,1276,98,137,0.98,Los Angeles Dodgers,Dodger Stadium,3324246,96,96,LAD,LAN,LAN +2012,NL,MIA,FLA,E,5,162,81,69,93,N,N,N,N,609,5437,1327,261,39,137,484,1228,149,41,35,40,724,655,4.1000000000,5,3,38,4322,1448,133,495,1113,103,154,0.98,Miami Marlins,Marlins Park,2219444,100,100,MIA,FLO,MIA +2012,NL,MIL,MIL,C,3,162,81,83,79,N,N,N,N,776,5557,1442,300,39,202,466,1240,158,39,90,35,733,682,4.2200000000,0,0,44,4361,1458,169,525,1402,99,132,0.98,Milwaukee Brewers,Miller Park,2831385,104,104,MIL,ML4,MIL +2012,NL,NYN,NYM,E,4,162,81,74,88,N,N,N,N,650,5450,1357,286,21,139,503,1250,79,38,42,30,709,651,4.0900000000,7,5,36,4302,1368,161,488,1240,101,135,0.98,New York Mets,Citi Field,2242803,96,97,NYM,NYN,NYN +2012,NL,PHI,PHI,E,3,162,81,81,81,N,N,N,N,684,5544,1414,271,28,158,454,1094,116,23,63,39,680,618,3.8600000000,5,4,42,4354,1387,178,409,1385,101,118,0.98,Philadelphia Phillies,Citizens Bank Park,3565718,102,101,PHI,PHI,PHI +2012,NL,PIT,PIT,C,4,162,81,79,83,N,N,N,N,651,5412,1313,241,37,170,444,1354,73,52,51,45,674,615,3.9100000000,2,1,45,4300,1357,153,490,1192,112,126,0.98,Pittsburgh Pirates,PNC Park,2091918,93,94,PIT,PIT,PIT +2012,NL,SDN,SDP,W,4,162,81,76,86,N,N,N,N,651,5422,1339,272,43,121,539,1238,155,46,54,34,710,640,4.0100000000,4,3,43,4304,1356,162,539,1205,121,97,0.98,San Diego Padres,Petco Park,2123721,92,92,SDP,SDN,SDN +2012,NL,SFN,SFG,W,1,162,81,94,68,Y,N,Y,Y,718,5558,1495,287,57,103,483,1097,118,39,29,61,649,593,3.6800000000,5,4,53,4353,1361,142,489,1237,115,134,0.98,San Francisco Giants,AT&T Park,3377371,88,88,SFG,SFN,SFN +2012,NL,SLN,STL,C,2,162,81,88,74,N,Y,N,N,765,5622,1526,290,37,159,533,1192,91,37,53,49,648,603,3.7100000000,4,2,42,4388,1420,134,436,1218,107,149,0.98,St. Louis Cardinals,Busch Stadium III,3262109,98,97,STL,SLN,SLN +2012,NL,WAS,WSN,E,1,162,81,98,64,Y,N,N,N,731,5615,1468,301,25,194,479,1325,105,35,41,36,594,543,3.3400000000,3,1,51,4405,1296,129,497,1325,94,134,0.99,Washington Nationals,Nationals Park,2370794,99,101,WSN,MON,WAS diff --git a/pandas/tests/io/json/test_json_table_schema_ext_dtype.py b/pandas/tests/io/json/test_json_table_schema_ext_dtype.py index cd760854cb01e..f6aa16ff0ce38 100644 --- a/pandas/tests/io/json/test_json_table_schema_ext_dtype.py +++ b/pandas/tests/io/json/test_json_table_schema_ext_dtype.py @@ -30,7 +30,7 @@ class TestBuildSchema: - def setup_method(self, method): + def setup_method(self): self.da = DateArray([dt.date(2021, 10, 10)]) self.dc = DecimalArray([decimal.Decimal(10)]) self.sa = array(["pandas"], dtype="string") @@ -117,7 +117,7 @@ def test_as_json_table_type_ext_integer_dtype(self): class TestTableOrient: - def setup_method(self, method): + def setup_method(self): self.da = DateArray([dt.date(2021, 10, 10)]) self.dc = DecimalArray([decimal.Decimal(10)]) self.sa = array(["pandas"], dtype="string") diff --git a/pandas/tests/io/json/test_pandas.py b/pandas/tests/io/json/test_pandas.py index f3a6f1f80359c..8f4e899843fe3 100644 --- a/pandas/tests/io/json/test_pandas.py +++ b/pandas/tests/io/json/test_pandas.py @@ -25,16 +25,6 @@ ) import pandas._testing as tm -_seriesd = tm.getSeriesData() - -_frame = DataFrame(_seriesd) - -_cat_frame = _frame.copy() -cat = ["bah"] * 5 + ["bar"] * 5 + ["baz"] * 5 + ["foo"] * (len(_cat_frame) - 15) -_cat_frame.index = pd.CategoricalIndex(cat, name="E") -_cat_frame["E"] = list(reversed(cat)) -_cat_frame["sort"] = np.arange(len(_cat_frame), dtype="int64") - def assert_json_roundtrip_equal(result, expected, orient): if orient == "records" or orient == "values": @@ -49,11 +39,17 @@ def assert_json_roundtrip_equal(result, expected, orient): ) @pytest.mark.filterwarnings("ignore:the 'numpy' keyword is deprecated:FutureWarning") class TestPandasContainer: - @pytest.fixture(autouse=True) - def setup(self): - self.categorical = _cat_frame.copy() + @pytest.fixture + def categorical_frame(self): + _seriesd = tm.getSeriesData() + + _cat_frame = DataFrame(_seriesd) - yield + cat = ["bah"] * 5 + ["bar"] * 5 + ["baz"] * 5 + ["foo"] * (len(_cat_frame) - 15) + _cat_frame.index = pd.CategoricalIndex(cat, name="E") + _cat_frame["E"] = list(reversed(cat)) + _cat_frame["sort"] = np.arange(len(_cat_frame), dtype="int64") + return _cat_frame @pytest.fixture def datetime_series(self): @@ -215,7 +211,9 @@ def test_roundtrip_str_axes(self, request, orient, convert_axes, numpy, dtype): @pytest.mark.parametrize("convert_axes", [True, False]) @pytest.mark.parametrize("numpy", [True, False]) - def test_roundtrip_categorical(self, request, orient, convert_axes, numpy): + def test_roundtrip_categorical( + self, request, orient, categorical_frame, convert_axes, numpy + ): # TODO: create a better frame to test with and improve coverage if orient in ("index", "columns"): request.node.add_marker( @@ -224,7 +222,7 @@ def test_roundtrip_categorical(self, request, orient, convert_axes, numpy): ) ) - data = self.categorical.to_json(orient=orient) + data = categorical_frame.to_json(orient=orient) if numpy and orient in ("records", "values"): request.node.add_marker( pytest.mark.xfail(reason=f"Orient {orient} is broken with numpy=True") @@ -232,7 +230,7 @@ def test_roundtrip_categorical(self, request, orient, convert_axes, numpy): result = read_json(data, orient=orient, convert_axes=convert_axes, numpy=numpy) - expected = self.categorical.copy() + expected = categorical_frame.copy() expected.index = expected.index.astype(str) # Categorical not preserved expected.index.name = None # index names aren't preserved in JSON @@ -366,7 +364,7 @@ def test_frame_from_json_missing_data(self, orient, convert_axes, numpy, dtype): assert np.isnan(result.iloc[0, 2]) @pytest.mark.parametrize("dtype", [True, False]) - def test_frame_read_json_dtype_missing_value(self, orient, dtype): + def test_frame_read_json_dtype_missing_value(self, dtype): # GH28501 Parse missing values using read_json with dtype=False # to NaN instead of None result = read_json("[null]", dtype=dtype) @@ -376,7 +374,7 @@ def test_frame_read_json_dtype_missing_value(self, orient, dtype): @pytest.mark.parametrize("inf", [np.inf, np.NINF]) @pytest.mark.parametrize("dtype", [True, False]) - def test_frame_infinity(self, orient, inf, dtype): + def test_frame_infinity(self, inf, dtype): # infinities get mapped to nulls which get mapped to NaNs during # deserialisation df = DataFrame([[1, 2], [4, 5, 6]]) @@ -987,18 +985,16 @@ def test_misc_example(self): expected = DataFrame([[1, 2], [1, 2]], columns=["a", "b"]) tm.assert_frame_equal(result, expected) - @tm.network - @pytest.mark.single - def test_round_trip_exception_(self): + def test_round_trip_exception_(self, datapath): # GH 3867 - csv = "https://raw.github.com/hayd/lahman2012/master/csvs/Teams.csv" - df = pd.read_csv(csv) + path = datapath("io", "json", "data", "teams.csv") + df = pd.read_csv(path) s = df.to_json() result = read_json(s) tm.assert_frame_equal(result.reindex(index=df.index, columns=df.columns), df) + @pytest.mark.network @tm.network - @pytest.mark.single @pytest.mark.parametrize( "field,dtype", [ @@ -1555,9 +1551,20 @@ def test_timedelta_as_label(self, date_format, key): ("index", "{\"('a', 'b')\":{\"('c', 'd')\":1}}"), ("columns", "{\"('c', 'd')\":{\"('a', 'b')\":1}}"), # TODO: the below have separate encoding procedures - # They produce JSON but not in a consistent manner - pytest.param("split", "", marks=pytest.mark.skip), - pytest.param("table", "", marks=pytest.mark.skip), + pytest.param( + "split", + "", + marks=pytest.mark.xfail( + reason="Produces JSON but not in a consistent manner" + ), + ), + pytest.param( + "table", + "", + marks=pytest.mark.xfail( + reason="Produces JSON but not in a consistent manner" + ), + ), ], ) def test_tuple_labels(self, orient, expected): diff --git a/pandas/tests/io/json/test_ujson.py b/pandas/tests/io/json/test_ujson.py index d2fb25ed6ea91..239ad28ac2b19 100644 --- a/pandas/tests/io/json/test_ujson.py +++ b/pandas/tests/io/json/test_ujson.py @@ -997,9 +997,11 @@ def test_dataframe_nested(self, orient): } assert ujson.decode(ujson.encode(nested, **kwargs)) == exp - def test_dataframe_numpy_labelled(self, orient): + def test_dataframe_numpy_labelled(self, orient, request): if orient in ("split", "values"): - pytest.skip("Incompatible with labelled=True") + request.node.add_marker( + pytest.mark.xfail(reason=f"{orient} incompatible for labelled=True") + ) df = DataFrame( [[1, 2, 3], [4, 5, 6]], diff --git a/pandas/tests/io/parser/common/test_file_buffer_url.py b/pandas/tests/io/parser/common/test_file_buffer_url.py index 2c0f1b01b00cb..b5c3e98a1821d 100644 --- a/pandas/tests/io/parser/common/test_file_buffer_url.py +++ b/pandas/tests/io/parser/common/test_file_buffer_url.py @@ -26,6 +26,7 @@ pytestmark = pytest.mark.usefixtures("pyarrow_skip") +@pytest.mark.network @tm.network def test_url(all_parsers, csv_dir_path): parser = all_parsers diff --git a/pandas/tests/io/parser/conftest.py b/pandas/tests/io/parser/conftest.py index 2070057aff10b..b2d2be362d0d3 100644 --- a/pandas/tests/io/parser/conftest.py +++ b/pandas/tests/io/parser/conftest.py @@ -108,7 +108,9 @@ def all_parsers(request): parser = request.param() if parser.engine == "pyarrow": pytest.importorskip("pyarrow", VERSIONS["pyarrow"]) - # Try setting num cpus to 1 to avoid hangs? + # Try setting num cpus to 1 to avoid hangs on Azure MacOS/Windows builds + # or better yet find a way to disable threads + # TODO(GH#44584) pytest.mark.single these tests import pyarrow pyarrow.set_cpu_count(1) diff --git a/pandas/tests/io/parser/dtypes/test_dtypes_basic.py b/pandas/tests/io/parser/dtypes/test_dtypes_basic.py index cdf9c0a1784a4..4d99b3c3c8c85 100644 --- a/pandas/tests/io/parser/dtypes/test_dtypes_basic.py +++ b/pandas/tests/io/parser/dtypes/test_dtypes_basic.py @@ -218,6 +218,7 @@ def decimal_number_check(parser, numeric_decimal, thousands, float_precision): pytest.skip("Skip test if no thousands sep is defined and sep is in value") df = parser.read_csv( StringIO(value), + float_precision=float_precision, sep="|", thousands=thousands, decimal=",", diff --git a/pandas/tests/io/parser/test_encoding.py b/pandas/tests/io/parser/test_encoding.py index 2b27332c7e85b..a70c3ee44edb6 100644 --- a/pandas/tests/io/parser/test_encoding.py +++ b/pandas/tests/io/parser/test_encoding.py @@ -153,9 +153,7 @@ def test_read_csv_utf_aliases(all_parsers, utf_value, encoding_fmt): (("io", "parser", "data", "sauron.SHIFT_JIS.csv"), "shiftjis"), ], ) -def test_binary_mode_file_buffers( - all_parsers, csv_dir_path, file_path, encoding, datapath -): +def test_binary_mode_file_buffers(all_parsers, file_path, encoding, datapath): # gh-23779: Python csv engine shouldn't error on files opened in binary. # gh-31575: Python csv engine shouldn't error on files opened in raw binary. parser = all_parsers diff --git a/pandas/tests/io/parser/test_network.py b/pandas/tests/io/parser/test_network.py index 6b08ea4da8f56..fb78a9aed7b13 100644 --- a/pandas/tests/io/parser/test_network.py +++ b/pandas/tests/io/parser/test_network.py @@ -23,17 +23,13 @@ @pytest.mark.network +@tm.network @pytest.mark.parametrize("mode", ["explicit", "infer"]) @pytest.mark.parametrize("engine", ["python", "c"]) def test_compressed_urls(salaries_table, mode, engine, compression_only): - extension = icom._compression_to_extension[compression_only] - check_compressed_urls(salaries_table, compression_only, extension, mode, engine) - - -@tm.network -def check_compressed_urls(salaries_table, compression, extension, mode, engine): # test reading compressed urls with various engines and # extension inference + extension = icom._compression_to_extension[compression_only] base_url = ( "https://github.com/pandas-dev/pandas/raw/main/" "pandas/tests/io/parser/data/salaries.csv" @@ -42,13 +38,14 @@ def check_compressed_urls(salaries_table, compression, extension, mode, engine): url = base_url + extension if mode != "explicit": - compression = mode + compression_only = mode - url_table = read_csv(url, sep="\t", compression=compression, engine=engine) + url_table = read_csv(url, sep="\t", compression=compression_only, engine=engine) tm.assert_frame_equal(url_table, salaries_table) -@tm.network("https://raw.githubusercontent.com/", check_before_test=True) +@pytest.mark.network +@tm.network def test_url_encoding_csv(): """ read_csv should honor the requested encoding for URLs. diff --git a/pandas/tests/io/parser/test_parse_dates.py b/pandas/tests/io/parser/test_parse_dates.py index 1dfd81366de72..54e671bbb5baf 100644 --- a/pandas/tests/io/parser/test_parse_dates.py +++ b/pandas/tests/io/parser/test_parse_dates.py @@ -1703,11 +1703,15 @@ def _helper_hypothesis_delimited_date(call, date_string, **kwargs): "date_format", ["%d %m %Y", "%m %d %Y", "%m %Y", "%Y %m %d", "%y %m %d", "%Y%m%d", "%y%m%d"], ) -def test_hypothesis_delimited_date(date_format, dayfirst, delimiter, test_datetime): +def test_hypothesis_delimited_date( + request, date_format, dayfirst, delimiter, test_datetime +): if date_format == "%m %Y" and delimiter == ".": - pytest.skip( - "parse_datetime_string cannot reliably tell whether " - "e.g. %m.%Y is a float or a date, thus we skip it" + request.node.add_marker( + pytest.mark.xfail( + reason="parse_datetime_string cannot reliably tell whether " + "e.g. %m.%Y is a float or a date" + ) ) result, expected = None, None except_in_dateutil, except_out_dateutil = None, None diff --git a/pandas/tests/io/parser/test_textreader.py b/pandas/tests/io/parser/test_textreader.py index d594bf8a75d49..a58ed02d30ef9 100644 --- a/pandas/tests/io/parser/test_textreader.py +++ b/pandas/tests/io/parser/test_textreader.py @@ -6,7 +6,6 @@ BytesIO, StringIO, ) -import os import numpy as np import pytest @@ -25,27 +24,23 @@ class TestTextReader: - @pytest.fixture(autouse=True) - def setup_method(self, datapath): - self.dirpath = datapath("io", "parser", "data") - csv1_dirpath = datapath("io", "data", "csv") - self.csv1 = os.path.join(csv1_dirpath, "test1.csv") - self.csv2 = os.path.join(self.dirpath, "test2.csv") - self.xls1 = os.path.join(self.dirpath, "test.xls") - - def test_file_handle(self): - with open(self.csv1, "rb") as f: + @pytest.fixture + def csv_path(self, datapath): + return datapath("io", "data", "csv", "test1.csv") + + def test_file_handle(self, csv_path): + with open(csv_path, "rb") as f: reader = TextReader(f) reader.read() - def test_file_handle_mmap(self): + def test_file_handle_mmap(self, csv_path): # this was never using memory_map=True - with open(self.csv1, "rb") as f: + with open(csv_path, "rb") as f: reader = TextReader(f, header=None) reader.read() - def test_StringIO(self): - with open(self.csv1, "rb") as f: + def test_StringIO(self, csv_path): + with open(csv_path, "rb") as f: text = f.read() src = BytesIO(text) reader = TextReader(src, header=None) diff --git a/pandas/tests/io/pytables/test_read.py b/pandas/tests/io/pytables/test_read.py index 1c9e63c66aadb..5b8911bcb0141 100644 --- a/pandas/tests/io/pytables/test_read.py +++ b/pandas/tests/io/pytables/test_read.py @@ -137,7 +137,7 @@ def test_read_column(setup_path): tm.assert_series_equal(result, expected) -def test_pytables_native_read(datapath, setup_path): +def test_pytables_native_read(datapath): with ensure_clean_store( datapath("io", "data", "legacy_hdf/pytables_native.h5"), mode="r" ) as store: @@ -146,7 +146,7 @@ def test_pytables_native_read(datapath, setup_path): @pytest.mark.skipif(is_platform_windows(), reason="native2 read fails oddly on windows") -def test_pytables_native2_read(datapath, setup_path): +def test_pytables_native2_read(datapath): with ensure_clean_store( datapath("io", "data", "legacy_hdf", "pytables_native2.h5"), mode="r" ) as store: @@ -155,7 +155,7 @@ def test_pytables_native2_read(datapath, setup_path): assert isinstance(d1, DataFrame) -def test_legacy_table_fixed_format_read_py2(datapath, setup_path): +def test_legacy_table_fixed_format_read_py2(datapath): # GH 24510 # legacy table with fixed format written in Python 2 with ensure_clean_store( @@ -170,7 +170,7 @@ def test_legacy_table_fixed_format_read_py2(datapath, setup_path): tm.assert_frame_equal(expected, result) -def test_legacy_table_fixed_format_read_datetime_py2(datapath, setup_path): +def test_legacy_table_fixed_format_read_datetime_py2(datapath): # GH 31750 # legacy table with fixed format and datetime64 column written in Python 2 with ensure_clean_store( @@ -186,7 +186,7 @@ def test_legacy_table_fixed_format_read_datetime_py2(datapath, setup_path): tm.assert_frame_equal(expected, result) -def test_legacy_table_read_py2(datapath, setup_path): +def test_legacy_table_read_py2(datapath): # issue: 24925 # legacy table written in Python 2 with ensure_clean_store( diff --git a/pandas/tests/io/pytables/test_store.py b/pandas/tests/io/pytables/test_store.py index 73e10adb0c2c3..f20757b09fb36 100644 --- a/pandas/tests/io/pytables/test_store.py +++ b/pandas/tests/io/pytables/test_store.py @@ -223,7 +223,7 @@ def test_versioning(setup_path): ), ], ) -def test_walk(where, expected, setup_path): +def test_walk(where, expected): # GH10143 objs = { "df1": DataFrame([1, 2, 3]), @@ -809,7 +809,7 @@ def test_select_filter_corner(setup_path): tm.assert_frame_equal(result, df.loc[:, df.columns[:75:2]]) -def test_path_pathlib(setup_path): +def test_path_pathlib(): df = tm.makeDataFrame() result = tm.round_trip_pathlib( @@ -835,7 +835,7 @@ def test_contiguous_mixed_data_table(start, stop, setup_path): tm.assert_frame_equal(df[start:stop], result) -def test_path_pathlib_hdfstore(setup_path): +def test_path_pathlib_hdfstore(): df = tm.makeDataFrame() def writer(path): @@ -850,7 +850,7 @@ def reader(path): tm.assert_frame_equal(df, result) -def test_pickle_path_localpath(setup_path): +def test_pickle_path_localpath(): df = tm.makeDataFrame() result = tm.round_trip_pathlib( lambda p: df.to_hdf(p, "df"), lambda p: read_hdf(p, "df") @@ -858,7 +858,7 @@ def test_pickle_path_localpath(setup_path): tm.assert_frame_equal(df, result) -def test_path_localpath_hdfstore(setup_path): +def test_path_localpath_hdfstore(): df = tm.makeDataFrame() def writer(path): @@ -873,7 +873,7 @@ def reader(path): tm.assert_frame_equal(df, result) -def test_copy(setup_path): +def test_copy(): with catch_warnings(record=True): diff --git a/pandas/tests/io/pytables/test_timezones.py b/pandas/tests/io/pytables/test_timezones.py index 36fa79d0bb7e3..e235c73123eaa 100644 --- a/pandas/tests/io/pytables/test_timezones.py +++ b/pandas/tests/io/pytables/test_timezones.py @@ -304,7 +304,7 @@ def test_store_timezone(setup_path): tm.assert_frame_equal(result, df) -def test_legacy_datetimetz_object(datapath, setup_path): +def test_legacy_datetimetz_object(datapath): # legacy from < 0.17.0 # 8260 expected = DataFrame( @@ -356,7 +356,7 @@ def test_read_with_where_tz_aware_index(setup_path): tm.assert_frame_equal(result, expected) -def test_py2_created_with_datetimez(datapath, setup_path): +def test_py2_created_with_datetimez(datapath): # The test HDF5 file was created in Python 2, but could not be read in # Python 3. # diff --git a/pandas/tests/io/sas/test_xport.py b/pandas/tests/io/sas/test_xport.py index 9232ea8a25e4d..2046427deeaf0 100644 --- a/pandas/tests/io/sas/test_xport.py +++ b/pandas/tests/io/sas/test_xport.py @@ -1,5 +1,3 @@ -import os - import numpy as np import pytest @@ -24,113 +22,122 @@ def numeric_as_float(data): class TestXport: @pytest.fixture(autouse=True) - def setup_method(self, datapath): - self.dirpath = datapath("io", "sas", "data") - self.file01 = os.path.join(self.dirpath, "DEMO_G.xpt") - self.file02 = os.path.join(self.dirpath, "SSHSV1_A.xpt") - self.file03 = os.path.join(self.dirpath, "DRXFCD_G.xpt") - self.file04 = os.path.join(self.dirpath, "paxraw_d_short.xpt") - self.file05 = os.path.join(self.dirpath, "DEMO_PUF.cpt") - + def setup_method(self): with td.file_leak_context(): yield + @pytest.fixture + def file01(self, datapath): + return datapath("io", "sas", "data", "DEMO_G.xpt") + + @pytest.fixture + def file02(self, datapath): + return datapath("io", "sas", "data", "SSHSV1_A.xpt") + + @pytest.fixture + def file03(self, datapath): + return datapath("io", "sas", "data", "DRXFCD_G.xpt") + + @pytest.fixture + def file04(self, datapath): + return datapath("io", "sas", "data", "paxraw_d_short.xpt") + + @pytest.fixture + def file05(self, datapath): + return datapath("io", "sas", "data", "DEMO_PUF.cpt") + @pytest.mark.slow - def test1_basic(self): + def test1_basic(self, file01): # Tests with DEMO_G.xpt (all numeric file) # Compare to this - data_csv = pd.read_csv(self.file01.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file01.replace(".xpt", ".csv")) numeric_as_float(data_csv) # Read full file - data = read_sas(self.file01, format="xport") + data = read_sas(file01, format="xport") tm.assert_frame_equal(data, data_csv) num_rows = data.shape[0] # Test reading beyond end of file - with read_sas(self.file01, format="xport", iterator=True) as reader: + with read_sas(file01, format="xport", iterator=True) as reader: data = reader.read(num_rows + 100) assert data.shape[0] == num_rows # Test incremental read with `read` method. - with read_sas(self.file01, format="xport", iterator=True) as reader: + with read_sas(file01, format="xport", iterator=True) as reader: data = reader.read(10) tm.assert_frame_equal(data, data_csv.iloc[0:10, :]) # Test incremental read with `get_chunk` method. - with read_sas(self.file01, format="xport", chunksize=10) as reader: + with read_sas(file01, format="xport", chunksize=10) as reader: data = reader.get_chunk() tm.assert_frame_equal(data, data_csv.iloc[0:10, :]) # Test read in loop m = 0 - with read_sas(self.file01, format="xport", chunksize=100) as reader: + with read_sas(file01, format="xport", chunksize=100) as reader: for x in reader: m += x.shape[0] assert m == num_rows # Read full file with `read_sas` method - data = read_sas(self.file01) + data = read_sas(file01) tm.assert_frame_equal(data, data_csv) - def test1_index(self): + def test1_index(self, file01): # Tests with DEMO_G.xpt using index (all numeric file) # Compare to this - data_csv = pd.read_csv(self.file01.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file01.replace(".xpt", ".csv")) data_csv = data_csv.set_index("SEQN") numeric_as_float(data_csv) # Read full file - data = read_sas(self.file01, index="SEQN", format="xport") + data = read_sas(file01, index="SEQN", format="xport") tm.assert_frame_equal(data, data_csv, check_index_type=False) # Test incremental read with `read` method. - with read_sas( - self.file01, index="SEQN", format="xport", iterator=True - ) as reader: + with read_sas(file01, index="SEQN", format="xport", iterator=True) as reader: data = reader.read(10) tm.assert_frame_equal(data, data_csv.iloc[0:10, :], check_index_type=False) # Test incremental read with `get_chunk` method. - with read_sas( - self.file01, index="SEQN", format="xport", chunksize=10 - ) as reader: + with read_sas(file01, index="SEQN", format="xport", chunksize=10) as reader: data = reader.get_chunk() tm.assert_frame_equal(data, data_csv.iloc[0:10, :], check_index_type=False) - def test1_incremental(self): + def test1_incremental(self, file01): # Test with DEMO_G.xpt, reading full file incrementally - data_csv = pd.read_csv(self.file01.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file01.replace(".xpt", ".csv")) data_csv = data_csv.set_index("SEQN") numeric_as_float(data_csv) - with read_sas(self.file01, index="SEQN", chunksize=1000) as reader: + with read_sas(file01, index="SEQN", chunksize=1000) as reader: all_data = list(reader) data = pd.concat(all_data, axis=0) tm.assert_frame_equal(data, data_csv, check_index_type=False) - def test2(self): + def test2(self, file02): # Test with SSHSV1_A.xpt # Compare to this - data_csv = pd.read_csv(self.file02.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file02.replace(".xpt", ".csv")) numeric_as_float(data_csv) - data = read_sas(self.file02) + data = read_sas(file02) tm.assert_frame_equal(data, data_csv) - def test2_binary(self): + def test2_binary(self, file02): # Test with SSHSV1_A.xpt, read as a binary file # Compare to this - data_csv = pd.read_csv(self.file02.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file02.replace(".xpt", ".csv")) numeric_as_float(data_csv) - with open(self.file02, "rb") as fd: + with open(file02, "rb") as fd: with td.file_leak_context(): # GH#35693 ensure that if we pass an open file, we # dont incorrectly close it in read_sas @@ -138,31 +145,31 @@ def test2_binary(self): tm.assert_frame_equal(data, data_csv) - def test_multiple_types(self): + def test_multiple_types(self, file03): # Test with DRXFCD_G.xpt (contains text and numeric variables) # Compare to this - data_csv = pd.read_csv(self.file03.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file03.replace(".xpt", ".csv")) - data = read_sas(self.file03, encoding="utf-8") + data = read_sas(file03, encoding="utf-8") tm.assert_frame_equal(data, data_csv) - def test_truncated_float_support(self): + def test_truncated_float_support(self, file04): # Test with paxraw_d_short.xpt, a shortened version of: # http://wwwn.cdc.gov/Nchs/Nhanes/2005-2006/PAXRAW_D.ZIP # This file has truncated floats (5 bytes in this case). # GH 11713 - data_csv = pd.read_csv(self.file04.replace(".xpt", ".csv")) + data_csv = pd.read_csv(file04.replace(".xpt", ".csv")) - data = read_sas(self.file04, format="xport") + data = read_sas(file04, format="xport") tm.assert_frame_equal(data.astype("int64"), data_csv) - def test_cport_header_found_raises(self): + def test_cport_header_found_raises(self, file05): # Test with DEMO_PUF.cpt, the beginning of puf2019_1_fall.xpt # from https://www.cms.gov/files/zip/puf2019.zip # (despite the extension, it's a cpt file) msg = "Header record indicates a CPORT file, which is not readable." with pytest.raises(ValueError, match=msg): - read_sas(self.file05, format="xport") + read_sas(file05, format="xport") diff --git a/pandas/tests/io/test_feather.py b/pandas/tests/io/test_feather.py index df858070f698a..bc1a5266001c8 100644 --- a/pandas/tests/io/test_feather.py +++ b/pandas/tests/io/test_feather.py @@ -181,6 +181,7 @@ def test_passthrough_keywords(self): df = tm.makeDataFrame().reset_index() self.check_round_trip(df, write_kwargs={"version": 1}) + @pytest.mark.network @tm.network def test_http_path(self, feather_file): # GH 29055 diff --git a/pandas/tests/io/test_html.py b/pandas/tests/io/test_html.py index 9c978623d4fb6..eeebb9a638afb 100644 --- a/pandas/tests/io/test_html.py +++ b/pandas/tests/io/test_html.py @@ -105,15 +105,16 @@ def test_same_ordering(datapath): scope="class", ) class TestReadHtml: - @pytest.fixture(autouse=True) - def set_files(self, datapath): - self.spam_data = datapath("io", "data", "html", "spam.html") - self.spam_data_kwargs = {} - self.spam_data_kwargs["encoding"] = "UTF-8" - self.banklist_data = datapath("io", "data", "html", "banklist.html") + @pytest.fixture + def spam_data(self, datapath): + return datapath("io", "data", "html", "spam.html") + + @pytest.fixture + def banklist_data(self, datapath): + return datapath("io", "data", "html", "banklist.html") @pytest.fixture(autouse=True, scope="function") - def set_defaults(self, flavor, request): + def set_defaults(self, flavor): self.read_html = partial(read_html, flavor=flavor) yield @@ -133,6 +134,7 @@ def test_to_html_compat(self): res = self.read_html(out, attrs={"class": "dataframe"}, index_col=0)[0] tm.assert_frame_equal(res, df) + @pytest.mark.network @tm.network def test_banklist_url_positional_match(self): url = "http://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/index.html" # noqa E501 @@ -152,6 +154,7 @@ def test_banklist_url_positional_match(self): assert_framelist_equal(df1, df2) + @pytest.mark.network @tm.network def test_banklist_url(self): url = "http://www.fdic.gov/resources/resolutions/bank-failures/failed-bank-list/index.html" # noqa E501 @@ -168,6 +171,7 @@ def test_banklist_url(self): assert_framelist_equal(df1, df2) + @pytest.mark.network @tm.network def test_spam_url(self): url = ( @@ -180,126 +184,122 @@ def test_spam_url(self): assert_framelist_equal(df1, df2) @pytest.mark.slow - def test_banklist(self): - df1 = self.read_html( - self.banklist_data, match=".*Florida.*", attrs={"id": "table"} - ) - df2 = self.read_html( - self.banklist_data, match="Metcalf Bank", attrs={"id": "table"} - ) + def test_banklist(self, banklist_data): + df1 = self.read_html(banklist_data, match=".*Florida.*", attrs={"id": "table"}) + df2 = self.read_html(banklist_data, match="Metcalf Bank", attrs={"id": "table"}) assert_framelist_equal(df1, df2) - def test_spam(self): - df1 = self.read_html(self.spam_data, match=".*Water.*") - df2 = self.read_html(self.spam_data, match="Unit") + def test_spam(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*") + df2 = self.read_html(spam_data, match="Unit") assert_framelist_equal(df1, df2) assert df1[0].iloc[0, 0] == "Proximates" assert df1[0].columns[0] == "Nutrient" - def test_spam_no_match(self): - dfs = self.read_html(self.spam_data) + def test_spam_no_match(self, spam_data): + dfs = self.read_html(spam_data) for df in dfs: assert isinstance(df, DataFrame) - def test_banklist_no_match(self): - dfs = self.read_html(self.banklist_data, attrs={"id": "table"}) + def test_banklist_no_match(self, banklist_data): + dfs = self.read_html(banklist_data, attrs={"id": "table"}) for df in dfs: assert isinstance(df, DataFrame) - def test_spam_header(self): - df = self.read_html(self.spam_data, match=".*Water.*", header=2)[0] + def test_spam_header(self, spam_data): + df = self.read_html(spam_data, match=".*Water.*", header=2)[0] assert df.columns[0] == "Proximates" assert not df.empty - def test_skiprows_int(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=1) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=1) + def test_skiprows_int(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=1) + df2 = self.read_html(spam_data, match="Unit", skiprows=1) assert_framelist_equal(df1, df2) - def test_skiprows_range(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=range(2)) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=range(2)) + def test_skiprows_range(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=range(2)) + df2 = self.read_html(spam_data, match="Unit", skiprows=range(2)) assert_framelist_equal(df1, df2) - def test_skiprows_list(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=[1, 2]) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=[2, 1]) + def test_skiprows_list(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=[1, 2]) + df2 = self.read_html(spam_data, match="Unit", skiprows=[2, 1]) assert_framelist_equal(df1, df2) - def test_skiprows_set(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows={1, 2}) - df2 = self.read_html(self.spam_data, match="Unit", skiprows={2, 1}) + def test_skiprows_set(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows={1, 2}) + df2 = self.read_html(spam_data, match="Unit", skiprows={2, 1}) assert_framelist_equal(df1, df2) - def test_skiprows_slice(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=1) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=1) + def test_skiprows_slice(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=1) + df2 = self.read_html(spam_data, match="Unit", skiprows=1) assert_framelist_equal(df1, df2) - def test_skiprows_slice_short(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=slice(2)) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=slice(2)) + def test_skiprows_slice_short(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=slice(2)) + df2 = self.read_html(spam_data, match="Unit", skiprows=slice(2)) assert_framelist_equal(df1, df2) - def test_skiprows_slice_long(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=slice(2, 5)) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=slice(4, 1, -1)) + def test_skiprows_slice_long(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=slice(2, 5)) + df2 = self.read_html(spam_data, match="Unit", skiprows=slice(4, 1, -1)) assert_framelist_equal(df1, df2) - def test_skiprows_ndarray(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", skiprows=np.arange(2)) - df2 = self.read_html(self.spam_data, match="Unit", skiprows=np.arange(2)) + def test_skiprows_ndarray(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", skiprows=np.arange(2)) + df2 = self.read_html(spam_data, match="Unit", skiprows=np.arange(2)) assert_framelist_equal(df1, df2) - def test_skiprows_invalid(self): + def test_skiprows_invalid(self, spam_data): with pytest.raises(TypeError, match=("is not a valid type for skipping rows")): - self.read_html(self.spam_data, match=".*Water.*", skiprows="asdf") + self.read_html(spam_data, match=".*Water.*", skiprows="asdf") - def test_index(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", index_col=0) - df2 = self.read_html(self.spam_data, match="Unit", index_col=0) + def test_index(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", index_col=0) + df2 = self.read_html(spam_data, match="Unit", index_col=0) assert_framelist_equal(df1, df2) - def test_header_and_index_no_types(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", header=1, index_col=0) - df2 = self.read_html(self.spam_data, match="Unit", header=1, index_col=0) + def test_header_and_index_no_types(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", header=1, index_col=0) + df2 = self.read_html(spam_data, match="Unit", header=1, index_col=0) assert_framelist_equal(df1, df2) - def test_header_and_index_with_types(self): - df1 = self.read_html(self.spam_data, match=".*Water.*", header=1, index_col=0) - df2 = self.read_html(self.spam_data, match="Unit", header=1, index_col=0) + def test_header_and_index_with_types(self, spam_data): + df1 = self.read_html(spam_data, match=".*Water.*", header=1, index_col=0) + df2 = self.read_html(spam_data, match="Unit", header=1, index_col=0) assert_framelist_equal(df1, df2) - def test_infer_types(self): + def test_infer_types(self, spam_data): # 10892 infer_types removed - df1 = self.read_html(self.spam_data, match=".*Water.*", index_col=0) - df2 = self.read_html(self.spam_data, match="Unit", index_col=0) + df1 = self.read_html(spam_data, match=".*Water.*", index_col=0) + df2 = self.read_html(spam_data, match="Unit", index_col=0) assert_framelist_equal(df1, df2) - def test_string_io(self): - with open(self.spam_data, **self.spam_data_kwargs) as f: + def test_string_io(self, spam_data): + with open(spam_data, encoding="UTF-8") as f: data1 = StringIO(f.read()) - with open(self.spam_data, **self.spam_data_kwargs) as f: + with open(spam_data, encoding="UTF-8") as f: data2 = StringIO(f.read()) df1 = self.read_html(data1, match=".*Water.*") df2 = self.read_html(data2, match="Unit") assert_framelist_equal(df1, df2) - def test_string(self): - with open(self.spam_data, **self.spam_data_kwargs) as f: + def test_string(self, spam_data): + with open(spam_data, encoding="UTF-8") as f: data = f.read() df1 = self.read_html(data, match=".*Water.*") @@ -307,22 +307,24 @@ def test_string(self): assert_framelist_equal(df1, df2) - def test_file_like(self): - with open(self.spam_data, **self.spam_data_kwargs) as f: + def test_file_like(self, spam_data): + with open(spam_data, encoding="UTF-8") as f: df1 = self.read_html(f, match=".*Water.*") - with open(self.spam_data, **self.spam_data_kwargs) as f: + with open(spam_data, encoding="UTF-8") as f: df2 = self.read_html(f, match="Unit") assert_framelist_equal(df1, df2) + @pytest.mark.network @tm.network def test_bad_url_protocol(self): with pytest.raises(URLError, match="urlopen error unknown url type: git"): self.read_html("git://github.com", match=".*Water.*") - @tm.network @pytest.mark.slow + @pytest.mark.network + @tm.network def test_invalid_url(self): msg = ( "Name or service not known|Temporary failure in name resolution|" @@ -332,8 +334,8 @@ def test_invalid_url(self): self.read_html("http://www.a23950sdfa908sd.com", match=".*Water.*") @pytest.mark.slow - def test_file_url(self): - url = self.banklist_data + def test_file_url(self, banklist_data): + url = banklist_data dfs = self.read_html( file_path_to_url(os.path.abspath(url)), match="First", attrs={"id": "table"} ) @@ -342,53 +344,55 @@ def test_file_url(self): assert isinstance(df, DataFrame) @pytest.mark.slow - def test_invalid_table_attrs(self): - url = self.banklist_data + def test_invalid_table_attrs(self, banklist_data): + url = banklist_data with pytest.raises(ValueError, match="No tables found"): self.read_html( url, match="First Federal Bank of Florida", attrs={"id": "tasdfable"} ) - def _bank_data(self, *args, **kwargs): + def _bank_data(self, path, *args, **kwargs): return self.read_html( - self.banklist_data, match="Metcalf", attrs={"id": "table"}, *args, **kwargs + path, match="Metcalf", attrs={"id": "table"}, *args, **kwargs ) @pytest.mark.slow - def test_multiindex_header(self): - df = self._bank_data(header=[0, 1])[0] + def test_multiindex_header(self, banklist_data): + df = self._bank_data(banklist_data, header=[0, 1])[0] assert isinstance(df.columns, MultiIndex) @pytest.mark.slow - def test_multiindex_index(self): - df = self._bank_data(index_col=[0, 1])[0] + def test_multiindex_index(self, banklist_data): + df = self._bank_data(banklist_data, index_col=[0, 1])[0] assert isinstance(df.index, MultiIndex) @pytest.mark.slow - def test_multiindex_header_index(self): - df = self._bank_data(header=[0, 1], index_col=[0, 1])[0] + def test_multiindex_header_index(self, banklist_data): + df = self._bank_data(banklist_data, header=[0, 1], index_col=[0, 1])[0] assert isinstance(df.columns, MultiIndex) assert isinstance(df.index, MultiIndex) @pytest.mark.slow - def test_multiindex_header_skiprows_tuples(self): - df = self._bank_data(header=[0, 1], skiprows=1)[0] + def test_multiindex_header_skiprows_tuples(self, banklist_data): + df = self._bank_data(banklist_data, header=[0, 1], skiprows=1)[0] assert isinstance(df.columns, MultiIndex) @pytest.mark.slow - def test_multiindex_header_skiprows(self): - df = self._bank_data(header=[0, 1], skiprows=1)[0] + def test_multiindex_header_skiprows(self, banklist_data): + df = self._bank_data(banklist_data, header=[0, 1], skiprows=1)[0] assert isinstance(df.columns, MultiIndex) @pytest.mark.slow - def test_multiindex_header_index_skiprows(self): - df = self._bank_data(header=[0, 1], index_col=[0, 1], skiprows=1)[0] + def test_multiindex_header_index_skiprows(self, banklist_data): + df = self._bank_data( + banklist_data, header=[0, 1], index_col=[0, 1], skiprows=1 + )[0] assert isinstance(df.index, MultiIndex) assert isinstance(df.columns, MultiIndex) @pytest.mark.slow - def test_regex_idempotency(self): - url = self.banklist_data + def test_regex_idempotency(self, banklist_data): + url = banklist_data dfs = self.read_html( file_path_to_url(os.path.abspath(url)), match=re.compile(re.compile("Florida")), @@ -398,17 +402,19 @@ def test_regex_idempotency(self): for df in dfs: assert isinstance(df, DataFrame) - def test_negative_skiprows(self): + def test_negative_skiprows(self, spam_data): msg = r"\(you passed a negative value\)" with pytest.raises(ValueError, match=msg): - self.read_html(self.spam_data, match="Water", skiprows=-1) + self.read_html(spam_data, match="Water", skiprows=-1) + @pytest.mark.network @tm.network def test_multiple_matches(self): url = "https://docs.python.org/2/" dfs = self.read_html(url, match="Python") assert len(dfs) > 1 + @pytest.mark.network @tm.network def test_python_docs_table(self): url = "https://docs.python.org/2/" @@ -589,7 +595,7 @@ def test_parse_header_of_non_string_column(self): tm.assert_frame_equal(result, expected) @pytest.mark.slow - def test_banklist_header(self, datapath): + def test_banklist_header(self, banklist_data, datapath): from pandas.io.html import _remove_whitespace def try_remove_ws(x): @@ -598,9 +604,7 @@ def try_remove_ws(x): except AttributeError: return x - df = self.read_html(self.banklist_data, match="Metcalf", attrs={"id": "table"})[ - 0 - ] + df = self.read_html(banklist_data, match="Metcalf", attrs={"id": "table"})[0] ground_truth = read_csv( datapath("io", "data", "csv", "banklist.csv"), converters={"Updated Date": Timestamp, "Closing Date": Timestamp}, @@ -639,15 +643,15 @@ def try_remove_ws(x): tm.assert_frame_equal(converted, gtnew) @pytest.mark.slow - def test_gold_canyon(self): + def test_gold_canyon(self, banklist_data): gc = "Gold Canyon" - with open(self.banklist_data) as f: + with open(banklist_data) as f: raw_text = f.read() assert gc in raw_text - df = self.read_html( - self.banklist_data, match="Gold Canyon", attrs={"id": "table"} - )[0] + df = self.read_html(banklist_data, match="Gold Canyon", attrs={"id": "table"})[ + 0 + ] assert gc in df.to_string() def test_different_number_of_cols(self): @@ -966,16 +970,16 @@ def test_decimal_rows(self): assert result["Header"].dtype == np.dtype("float64") tm.assert_frame_equal(result, expected) - def test_bool_header_arg(self): + @pytest.mark.parametrize("arg", [True, False]) + def test_bool_header_arg(self, spam_data, arg): # GH 6114 msg = re.escape( "Passing a bool to header is invalid. Use header=None for no header or " "header=int or list-like of ints to specify the row(s) making up the " "column names" ) - for arg in [True, False]: - with pytest.raises(TypeError, match=msg): - self.read_html(self.spam_data, header=arg) + with pytest.raises(TypeError, match=msg): + self.read_html(spam_data, header=arg) def test_converters(self): # GH 13461 diff --git a/pandas/tests/io/test_parquet.py b/pandas/tests/io/test_parquet.py index 2eb8738d88b41..b57923093e3e8 100644 --- a/pandas/tests/io/test_parquet.py +++ b/pandas/tests/io/test_parquet.py @@ -380,6 +380,7 @@ def check_external_error_on_write(self, df, engine, exc): with tm.external_error_raised(exc): to_parquet(df, path, engine, compression=None) + @pytest.mark.network @tm.network def test_parquet_read_from_url(self, df_compat, engine): if engine != "auto": @@ -942,11 +943,17 @@ def test_timestamp_nanoseconds(self, pa): df = pd.DataFrame({"a": pd.date_range("2017-01-01", freq="1n", periods=10)}) check_round_trip(df, pa, write_kwargs={"version": ver}) - def test_timezone_aware_index(self, pa, timezone_aware_date_list): - if not pa_version_under2p0: - # temporary skip this test until it is properly resolved - # https://github.com/pandas-dev/pandas/issues/37286 - pytest.skip() + def test_timezone_aware_index(self, request, pa, timezone_aware_date_list): + if ( + not pa_version_under2p0 + and timezone_aware_date_list.tzinfo != datetime.timezone.utc + ): + request.node.add_marker( + pytest.mark.xfail( + reason="temporary skip this test until it is properly resolved: " + "https://github.com/pandas-dev/pandas/issues/37286" + ) + ) idx = 5 * [timezone_aware_date_list] df = pd.DataFrame(index=idx, data={"index_as_col": idx}) @@ -995,7 +1002,6 @@ def test_basic(self, fp, df_full): df["timedelta"] = pd.timedelta_range("1 day", periods=3) check_round_trip(df, fp) - @pytest.mark.skip(reason="not supported") def test_duplicate_columns(self, fp): # not currently able to handle duplicate columns diff --git a/pandas/tests/io/test_s3.py b/pandas/tests/io/test_s3.py index 0ee6cb0796644..6702d58c139af 100644 --- a/pandas/tests/io/test_s3.py +++ b/pandas/tests/io/test_s3.py @@ -21,8 +21,9 @@ def test_streaming_s3_objects(): read_csv(body) -@tm.network @td.skip_if_no("s3fs") +@pytest.mark.network +@tm.network def test_read_without_creds_from_pub_bucket(): # GH 34626 # Use Amazon Open Data Registry - https://registry.opendata.aws/gdelt @@ -30,8 +31,9 @@ def test_read_without_creds_from_pub_bucket(): assert len(result) == 3 -@tm.network @td.skip_if_no("s3fs") +@pytest.mark.network +@tm.network def test_read_with_creds_from_pub_bucket(): # Ensure we can read from a public bucket with credentials # GH 34626 diff --git a/pandas/tests/io/test_sql.py b/pandas/tests/io/test_sql.py index 741af4324c1a6..e383617c020aa 100644 --- a/pandas/tests/io/test_sql.py +++ b/pandas/tests/io/test_sql.py @@ -498,6 +498,7 @@ def sqlite_buildin_iris(sqlite_buildin, iris_path): all_connectable_iris = sqlalchemy_connectable_iris + ["sqlite_buildin_iris"] +@pytest.mark.db @pytest.mark.parametrize("conn", all_connectable) @pytest.mark.parametrize("method", [None, "multi"]) def test_to_sql(conn, method, test_frame1, request): @@ -508,6 +509,7 @@ def test_to_sql(conn, method, test_frame1, request): assert count_rows(conn, "test_frame") == len(test_frame1) +@pytest.mark.db @pytest.mark.parametrize("conn", all_connectable) @pytest.mark.parametrize("mode, num_row_coef", [("replace", 1), ("append", 2)]) def test_to_sql_exist(conn, mode, num_row_coef, test_frame1, request): @@ -519,6 +521,7 @@ def test_to_sql_exist(conn, mode, num_row_coef, test_frame1, request): assert count_rows(conn, "test_frame") == num_row_coef * len(test_frame1) +@pytest.mark.db @pytest.mark.parametrize("conn", all_connectable) def test_to_sql_exist_fail(conn, test_frame1, request): conn = request.getfixturevalue(conn) @@ -531,6 +534,7 @@ def test_to_sql_exist_fail(conn, test_frame1, request): pandasSQL.to_sql(test_frame1, "test_frame", if_exists="fail") +@pytest.mark.db @pytest.mark.parametrize("conn", all_connectable_iris) def test_read_iris(conn, request): conn = request.getfixturevalue(conn) @@ -539,6 +543,7 @@ def test_read_iris(conn, request): check_iris_frame(iris_frame) +@pytest.mark.db @pytest.mark.parametrize("conn", sqlalchemy_connectable) def test_to_sql_callable(conn, test_frame1, request): conn = request.getfixturevalue(conn) @@ -557,6 +562,7 @@ def sample(pd_table, conn, keys, data_iter): assert count_rows(conn, "test_frame") == len(test_frame1) +@pytest.mark.db @pytest.mark.parametrize("conn", mysql_connectable) def test_default_type_conversion(conn, request): conn = request.getfixturevalue(conn) @@ -575,6 +581,7 @@ def test_default_type_conversion(conn, request): assert issubclass(df.BoolColWithNull.dtype.type, np.floating) +@pytest.mark.db @pytest.mark.parametrize("conn", mysql_connectable) def test_read_procedure(conn, request): conn = request.getfixturevalue(conn) @@ -611,6 +618,7 @@ def test_read_procedure(conn, request): tm.assert_frame_equal(df, res2) +@pytest.mark.db @pytest.mark.parametrize("conn", postgresql_connectable) def test_copy_from_callable_insertion_method(conn, request): # GH 8953 @@ -1524,9 +1532,25 @@ def test_sql_open_close(self, test_frame3): @pytest.mark.skipif(SQLALCHEMY_INSTALLED, reason="SQLAlchemy is installed") def test_con_string_import_error(self): conn = "mysql://root@localhost/pandas" - with pytest.raises(ImportError, match="SQLAlchemy"): + msg = "Using URI string without sqlalchemy installed" + with pytest.raises(ImportError, match=msg): sql.read_sql("SELECT * FROM iris", conn) + @pytest.mark.skipif(SQLALCHEMY_INSTALLED, reason="SQLAlchemy is installed") + def test_con_unknown_dbapi2_class_does_not_error_without_sql_alchemy_installed( + self, + ): + class MockSqliteConnection: + def __init__(self, *args, **kwargs): + self.conn = sqlite3.Connection(*args, **kwargs) + + def __getattr__(self, name): + return getattr(self.conn, name) + + conn = MockSqliteConnection(":memory:") + with tm.assert_produces_warning(UserWarning): + sql.read_sql("SELECT 1", conn) + def test_read_sql_delegate(self): iris_frame1 = sql.read_sql_query("SELECT * FROM iris", self.conn) iris_frame2 = sql.read_sql("SELECT * FROM iris", self.conn) diff --git a/pandas/tests/io/xml/test_to_xml.py b/pandas/tests/io/xml/test_to_xml.py index 0666dcacecf39..0ad1ad03fb5b5 100644 --- a/pandas/tests/io/xml/test_to_xml.py +++ b/pandas/tests/io/xml/test_to_xml.py @@ -363,21 +363,21 @@ def test_index_false_with_offset_input_index(parser, offset_index): """ -def test_na_elem_output(datapath, parser): +def test_na_elem_output(parser): output = geom_df.to_xml(parser=parser) output = equalize_decl(output) assert output == na_expected -def test_na_empty_str_elem_option(datapath, parser): +def test_na_empty_str_elem_option(parser): output = geom_df.to_xml(na_rep="", parser=parser) output = equalize_decl(output) assert output == na_expected -def test_na_empty_elem_option(datapath, parser): +def test_na_empty_elem_option(parser): expected = """\ @@ -410,7 +410,7 @@ def test_na_empty_elem_option(datapath, parser): # ATTR_COLS -def test_attrs_cols_nan_output(datapath, parser): +def test_attrs_cols_nan_output(parser): expected = """\ @@ -425,7 +425,7 @@ def test_attrs_cols_nan_output(datapath, parser): assert output == expected -def test_attrs_cols_prefix(datapath, parser): +def test_attrs_cols_prefix(parser): expected = """\ @@ -461,7 +461,7 @@ def test_attrs_wrong_type(parser): # ELEM_COLS -def test_elems_cols_nan_output(datapath, parser): +def test_elems_cols_nan_output(parser): elems_cols_expected = """\ @@ -500,7 +500,7 @@ def test_elems_wrong_type(parser): geom_df.to_xml(elem_cols='"shape", "degree", "sides"', parser=parser) -def test_elems_and_attrs_cols(datapath, parser): +def test_elems_and_attrs_cols(parser): elems_cols_expected = """\ @@ -532,7 +532,7 @@ def test_elems_and_attrs_cols(datapath, parser): # HIERARCHICAL COLUMNS -def test_hierarchical_columns(datapath, parser): +def test_hierarchical_columns(parser): expected = """\ @@ -579,7 +579,7 @@ def test_hierarchical_columns(datapath, parser): assert output == expected -def test_hierarchical_attrs_columns(datapath, parser): +def test_hierarchical_attrs_columns(parser): expected = """\ @@ -609,7 +609,7 @@ def test_hierarchical_attrs_columns(datapath, parser): # MULTIINDEX -def test_multi_index(datapath, parser): +def test_multi_index(parser): expected = """\ @@ -648,7 +648,7 @@ def test_multi_index(datapath, parser): assert output == expected -def test_multi_index_attrs_cols(datapath, parser): +def test_multi_index_attrs_cols(parser): expected = """\ @@ -1020,7 +1020,7 @@ def test_stylesheet_buffered_reader(datapath, mode): @td.skip_if_no("lxml") -def test_stylesheet_wrong_path(datapath): +def test_stylesheet_wrong_path(): from lxml.etree import XMLSyntaxError xsl = os.path.join("data", "xml", "row_field_output.xslt") @@ -1102,7 +1102,7 @@ def test_incorrect_xsl_eval(): @td.skip_if_no("lxml") -def test_incorrect_xsl_apply(parser): +def test_incorrect_xsl_apply(): from lxml.etree import XSLTApplyError xsl = """\ @@ -1122,7 +1122,7 @@ def test_incorrect_xsl_apply(parser): geom_df.to_xml(path, stylesheet=xsl) -def test_stylesheet_with_etree(datapath): +def test_stylesheet_with_etree(): xsl = """\ @@ -1322,7 +1322,7 @@ def test_ea_dtypes(any_numeric_ea_dtype, parser): assert equalize_decl(result).strip() == expected -def test_unsuported_compression(datapath, parser): +def test_unsuported_compression(parser): with pytest.raises(ValueError, match="Unrecognized compression type"): with tm.ensure_clean() as path: geom_df.to_xml(path, parser=parser, compression="7z") @@ -1331,10 +1331,10 @@ def test_unsuported_compression(datapath, parser): # STORAGE OPTIONS -@tm.network @td.skip_if_no("s3fs") @td.skip_if_no("lxml") -def test_s3_permission_output(parser): +def test_s3_permission_output(parser, s3_resource): + # s3_resource hosts pandas-test import s3fs with pytest.raises(PermissionError, match="Access Denied"): diff --git a/pandas/tests/io/xml/test_xml.py b/pandas/tests/io/xml/test_xml.py index aef94af60c3dd..76436d2358265 100644 --- a/pandas/tests/io/xml/test_xml.py +++ b/pandas/tests/io/xml/test_xml.py @@ -254,10 +254,11 @@ def test_parser_consistency_file(datapath): tm.assert_frame_equal(df_file_lxml, df_file_etree) -@tm.network +@pytest.mark.network @pytest.mark.slow @td.skip_if_no("lxml") -def test_parser_consistency_url(datapath): +@tm.network +def test_parser_consistency_url(): url = ( "https://data.cityofchicago.org/api/views/" "8pix-ypme/rows.xml?accessType=DOWNLOAD" @@ -401,6 +402,7 @@ def test_wrong_file_path_etree(): read_xml(filename, parser="etree") +@pytest.mark.network @tm.network @td.skip_if_no("lxml") def test_url(): @@ -421,6 +423,7 @@ def test_url(): tm.assert_frame_equal(df_url, df_expected) +@pytest.mark.network @tm.network def test_wrong_url(parser): with pytest.raises(HTTPError, match=("HTTP Error 404: Not Found")): @@ -993,7 +996,7 @@ def test_stylesheet_file_close(datapath, mode): @td.skip_if_no("lxml") -def test_stylesheet_with_etree(datapath): +def test_stylesheet_with_etree(): kml = os.path.join("data", "xml", "cta_rail_lines.kml") xsl = os.path.join("data", "xml", "flatten_doc.xsl") @@ -1016,8 +1019,9 @@ def test_empty_stylesheet(val): read_xml(kml, stylesheet=val) -@tm.network +@pytest.mark.network @td.skip_if_no("lxml") +@tm.network def test_online_stylesheet(): xml = "https://www.w3schools.com/xml/cdcatalog_with_xsl.xml" xsl = "https://www.w3schools.com/xml/cdcatalog.xsl" @@ -1090,7 +1094,7 @@ def test_wrong_compression(parser, compression, compression_only): read_xml(path, parser=parser, compression=attempted_compression) -def test_unsuported_compression(datapath, parser): +def test_unsuported_compression(parser): with pytest.raises(ValueError, match="Unrecognized compression type"): with tm.ensure_clean() as path: read_xml(path, parser=parser, compression="7z") @@ -1099,13 +1103,14 @@ def test_unsuported_compression(datapath, parser): # STORAGE OPTIONS -@tm.network +@pytest.mark.network @td.skip_if_no("s3fs") @td.skip_if_no("lxml") @pytest.mark.skipif( os.environ.get("PANDAS_CI", "0") == "1", reason="2022.1.17: Hanging on the CI min versions build.", ) +@tm.network def test_s3_parser_consistency(): # Python Software Foundation (2019 IRS-990 RETURN) s3 = "s3://irs-form-990/201923199349319487_public.xml" diff --git a/pandas/tests/plotting/frame/test_frame.py b/pandas/tests/plotting/frame/test_frame.py index ff247349ff4d5..5cbfb5286bb10 100644 --- a/pandas/tests/plotting/frame/test_frame.py +++ b/pandas/tests/plotting/frame/test_frame.py @@ -746,7 +746,7 @@ def test_plot_scatter_with_categorical_data(self, x, y): _check_plot_works(df.plot.scatter, x=x, y=y) - def test_plot_scatter_with_c(self, request): + def test_plot_scatter_with_c(self): from pandas.plotting._matplotlib.compat import mpl_ge_3_4_0 df = DataFrame( diff --git a/pandas/tests/plotting/test_converter.py b/pandas/tests/plotting/test_converter.py index fe8620ef76c4b..1125975287469 100644 --- a/pandas/tests/plotting/test_converter.py +++ b/pandas/tests/plotting/test_converter.py @@ -157,7 +157,7 @@ def test_registry_resets(self): class TestDateTimeConverter: - def setup_method(self, method): + def setup_method(self): self.dtc = converter.DatetimeConverter() self.tc = converter.TimeFormatter(None) @@ -292,7 +292,7 @@ def test_convert_nested(self): class TestPeriodConverter: - def setup_method(self, method): + def setup_method(self): self.pc = converter.PeriodConverter() class Axis: diff --git a/pandas/tests/resample/test_base.py b/pandas/tests/resample/test_base.py index f375915b620ec..e71216b261d95 100644 --- a/pandas/tests/resample/test_base.py +++ b/pandas/tests/resample/test_base.py @@ -98,11 +98,15 @@ def test_raises_on_non_datetimelike_index(): @all_ts @pytest.mark.parametrize("freq", ["M", "D", "H"]) -def test_resample_empty_series(freq, empty_series_dti, resample_method): +def test_resample_empty_series(freq, empty_series_dti, resample_method, request): # GH12771 & GH12868 - if resample_method == "ohlc": - pytest.skip("need to test for ohlc from GH13083") + if resample_method == "ohlc" and isinstance(empty_series_dti.index, PeriodIndex): + request.node.add_marker( + pytest.mark.xfail( + reason=f"GH13083: {resample_method} fails for PeriodIndex" + ) + ) ser = empty_series_dti result = getattr(ser.resample(freq), resample_method)() diff --git a/pandas/tests/resample/test_time_grouper.py b/pandas/tests/resample/test_time_grouper.py index 1557eab5df31a..8a94609900e1d 100644 --- a/pandas/tests/resample/test_time_grouper.py +++ b/pandas/tests/resample/test_time_grouper.py @@ -147,7 +147,7 @@ def test_aggregate_normal(resample_method): @pytest.mark.xfail(reason="if TimeGrouper is used included, 'nth' doesn't work yet") -def test_aggregate_nth(resample_method): +def test_aggregate_nth(): """Check TimeGrouper's aggregation is identical as normal groupby.""" data = np.random.randn(20, 4) diff --git a/pandas/tests/reshape/merge/test_join.py b/pandas/tests/reshape/merge/test_join.py index 7ca3ac325d788..7b932a3bb80c0 100644 --- a/pandas/tests/reshape/merge/test_join.py +++ b/pandas/tests/reshape/merge/test_join.py @@ -23,7 +23,7 @@ class TestJoin: - def setup_method(self, method): + def setup_method(self): # aggregate multiple columns self.df = DataFrame( { diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 1249194d3a36d..1f19b464b761b 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -118,7 +118,7 @@ def dfs_for_indicator(): class TestMerge: - def setup_method(self, method): + def setup_method(self): # aggregate multiple columns self.df = DataFrame( { diff --git a/pandas/tests/reshape/merge/test_merge_asof.py b/pandas/tests/reshape/merge/test_merge_asof.py index ea2f16eae6411..ebf67b0518c65 100644 --- a/pandas/tests/reshape/merge/test_merge_asof.py +++ b/pandas/tests/reshape/merge/test_merge_asof.py @@ -27,17 +27,29 @@ def read_data(self, datapath, name, dedupe=False): x.time = to_datetime(x.time) return x - @pytest.fixture(autouse=True) - def setup_method(self, datapath): + @pytest.fixture + def trades(self, datapath): + return self.read_data(datapath, "trades.csv") - self.trades = self.read_data(datapath, "trades.csv") - self.quotes = self.read_data(datapath, "quotes.csv", dedupe=True) - self.asof = self.read_data(datapath, "asof.csv") - self.tolerance = self.read_data(datapath, "tolerance.csv") - self.allow_exact_matches = self.read_data(datapath, "allow_exact_matches.csv") - self.allow_exact_matches_and_tolerance = self.read_data( - datapath, "allow_exact_matches_and_tolerance.csv" - ) + @pytest.fixture + def quotes(self, datapath): + return self.read_data(datapath, "quotes.csv", dedupe=True) + + @pytest.fixture + def asof(self, datapath): + return self.read_data(datapath, "asof.csv") + + @pytest.fixture + def tolerance(self, datapath): + return self.read_data(datapath, "tolerance.csv") + + @pytest.fixture + def allow_exact_matches(self, datapath): + return self.read_data(datapath, "allow_exact_matches.csv") + + @pytest.fixture + def allow_exact_matches_and_tolerance(self, datapath): + return self.read_data(datapath, "allow_exact_matches_and_tolerance.csv") def test_examples1(self): """doc-string examples""" @@ -163,33 +175,28 @@ def test_examples4(self): result = merge_asof(left, right, on="a", direction="nearest") tm.assert_frame_equal(result, expected) - def test_basic(self): + def test_basic(self, trades, asof, quotes): - expected = self.asof - trades = self.trades - quotes = self.quotes + expected = asof result = merge_asof(trades, quotes, on="time", by="ticker") tm.assert_frame_equal(result, expected) - def test_basic_categorical(self): + def test_basic_categorical(self, trades, asof, quotes): - expected = self.asof - trades = self.trades.copy() + expected = asof trades.ticker = trades.ticker.astype("category") - quotes = self.quotes.copy() quotes.ticker = quotes.ticker.astype("category") expected.ticker = expected.ticker.astype("category") result = merge_asof(trades, quotes, on="time", by="ticker") tm.assert_frame_equal(result, expected) - def test_basic_left_index(self): + def test_basic_left_index(self, trades, asof, quotes): # GH14253 - expected = self.asof - trades = self.trades.set_index("time") - quotes = self.quotes + expected = asof + trades = trades.set_index("time") result = merge_asof( trades, quotes, left_index=True, right_on="time", by="ticker" @@ -200,77 +207,77 @@ def test_basic_left_index(self): expected = expected[result.columns] tm.assert_frame_equal(result, expected) - def test_basic_right_index(self): + def test_basic_right_index(self, trades, asof, quotes): - expected = self.asof - trades = self.trades - quotes = self.quotes.set_index("time") + expected = asof + trades = trades + quotes = quotes.set_index("time") result = merge_asof( trades, quotes, left_on="time", right_index=True, by="ticker" ) tm.assert_frame_equal(result, expected) - def test_basic_left_index_right_index(self): + def test_basic_left_index_right_index(self, trades, asof, quotes): - expected = self.asof.set_index("time") - trades = self.trades.set_index("time") - quotes = self.quotes.set_index("time") + expected = asof.set_index("time") + trades = trades.set_index("time") + quotes = quotes.set_index("time") result = merge_asof( trades, quotes, left_index=True, right_index=True, by="ticker" ) tm.assert_frame_equal(result, expected) - def test_multi_index(self): + def test_multi_index_left(self, trades, quotes): # MultiIndex is prohibited - trades = self.trades.set_index(["time", "price"]) - quotes = self.quotes.set_index("time") + trades = trades.set_index(["time", "price"]) + quotes = quotes.set_index("time") with pytest.raises(MergeError, match="left can only have one index"): merge_asof(trades, quotes, left_index=True, right_index=True) - trades = self.trades.set_index("time") - quotes = self.quotes.set_index(["time", "bid"]) + def test_multi_index_right(self, trades, quotes): + + # MultiIndex is prohibited + trades = trades.set_index("time") + quotes = quotes.set_index(["time", "bid"]) with pytest.raises(MergeError, match="right can only have one index"): merge_asof(trades, quotes, left_index=True, right_index=True) - def test_on_and_index(self): + def test_on_and_index_left_on(self, trades, quotes): # "on" parameter and index together is prohibited - trades = self.trades.set_index("time") - quotes = self.quotes.set_index("time") + trades = trades.set_index("time") + quotes = quotes.set_index("time") msg = 'Can only pass argument "left_on" OR "left_index" not both.' with pytest.raises(MergeError, match=msg): merge_asof( trades, quotes, left_on="price", left_index=True, right_index=True ) - trades = self.trades.set_index("time") - quotes = self.quotes.set_index("time") + def test_on_and_index_right_on(self, trades, quotes): + trades = trades.set_index("time") + quotes = quotes.set_index("time") msg = 'Can only pass argument "right_on" OR "right_index" not both.' with pytest.raises(MergeError, match=msg): merge_asof( trades, quotes, right_on="bid", left_index=True, right_index=True ) - def test_basic_left_by_right_by(self): + def test_basic_left_by_right_by(self, trades, asof, quotes): # GH14253 - expected = self.asof - trades = self.trades - quotes = self.quotes + expected = asof result = merge_asof( trades, quotes, on="time", left_by="ticker", right_by="ticker" ) tm.assert_frame_equal(result, expected) - def test_missing_right_by(self): + def test_missing_right_by(self, trades, asof, quotes): - expected = self.asof - trades = self.trades - quotes = self.quotes + expected = asof q = quotes[quotes.ticker != "MSFT"] result = merge_asof(trades, q, on="time", by="ticker") @@ -466,7 +473,7 @@ def test_basic2(self, datapath): result = merge_asof(trades, quotes, on="time", by="ticker") tm.assert_frame_equal(result, expected) - def test_basic_no_by(self): + def test_basic_no_by(self, trades, asof, quotes): f = ( lambda x: x[x.ticker == "MSFT"] .drop("ticker", axis=1) @@ -474,17 +481,14 @@ def test_basic_no_by(self): ) # just use a single ticker - expected = f(self.asof) - trades = f(self.trades) - quotes = f(self.quotes) + expected = f(asof) + trades = f(trades) + quotes = f(quotes) result = merge_asof(trades, quotes, on="time") tm.assert_frame_equal(result, expected) - def test_valid_join_keys(self): - - trades = self.trades - quotes = self.quotes + def test_valid_join_keys(self, trades, quotes): msg = r"incompatible merge keys \[1\] .* must be the same type" @@ -497,14 +501,14 @@ def test_valid_join_keys(self): with pytest.raises(MergeError, match="can only asof on a key for left"): merge_asof(trades, quotes, by="ticker") - def test_with_duplicates(self, datapath): + def test_with_duplicates(self, datapath, trades, quotes): q = ( - pd.concat([self.quotes, self.quotes]) + pd.concat([quotes, quotes]) .sort_values(["time", "ticker"]) .reset_index(drop=True) ) - result = merge_asof(self.trades, q, on="time", by="ticker") + result = merge_asof(trades, q, on="time", by="ticker") expected = self.read_data(datapath, "asof.csv") tm.assert_frame_equal(result, expected) @@ -518,10 +522,7 @@ def test_with_duplicates_no_on(self): ) tm.assert_frame_equal(result, expected) - def test_valid_allow_exact_matches(self): - - trades = self.trades - quotes = self.quotes + def test_valid_allow_exact_matches(self, trades, quotes): msg = "allow_exact_matches must be boolean, passed foo" @@ -530,10 +531,7 @@ def test_valid_allow_exact_matches(self): trades, quotes, on="time", by="ticker", allow_exact_matches="foo" ) - def test_valid_tolerance(self): - - trades = self.trades - quotes = self.quotes + def test_valid_tolerance(self, trades, quotes): # dti merge_asof(trades, quotes, on="time", by="ticker", tolerance=Timedelta("1s")) @@ -580,10 +578,10 @@ def test_valid_tolerance(self): tolerance=-1, ) - def test_non_sorted(self): + def test_non_sorted(self, trades, quotes): - trades = self.trades.sort_values("time", ascending=False) - quotes = self.quotes.sort_values("time", ascending=False) + trades = trades.sort_values("time", ascending=False) + quotes = quotes.sort_values("time", ascending=False) # we require that we are already sorted on time & quotes assert not trades.time.is_monotonic_increasing @@ -591,31 +589,29 @@ def test_non_sorted(self): with pytest.raises(ValueError, match="left keys must be sorted"): merge_asof(trades, quotes, on="time", by="ticker") - trades = self.trades.sort_values("time") + trades = trades.sort_values("time") assert trades.time.is_monotonic_increasing assert not quotes.time.is_monotonic_increasing with pytest.raises(ValueError, match="right keys must be sorted"): merge_asof(trades, quotes, on="time", by="ticker") - quotes = self.quotes.sort_values("time") + quotes = quotes.sort_values("time") assert trades.time.is_monotonic_increasing assert quotes.time.is_monotonic_increasing # ok, though has dupes - merge_asof(trades, self.quotes, on="time", by="ticker") + merge_asof(trades, quotes, on="time", by="ticker") @pytest.mark.parametrize( - "tolerance", + "tolerance_ts", [Timedelta("1day"), datetime.timedelta(days=1)], ids=["Timedelta", "datetime.timedelta"], ) - def test_tolerance(self, tolerance): - - trades = self.trades - quotes = self.quotes - - result = merge_asof(trades, quotes, on="time", by="ticker", tolerance=tolerance) - expected = self.tolerance + def test_tolerance(self, tolerance_ts, trades, quotes, tolerance): + result = merge_asof( + trades, quotes, on="time", by="ticker", tolerance=tolerance_ts + ) + expected = tolerance tm.assert_frame_equal(result, expected) def test_tolerance_forward(self): @@ -702,11 +698,11 @@ def test_tolerance_float(self): result = merge_asof(left, right, on="a", direction="nearest", tolerance=0.5) tm.assert_frame_equal(result, expected) - def test_index_tolerance(self): + def test_index_tolerance(self, trades, quotes, tolerance): # GH 15135 - expected = self.tolerance.set_index("time") - trades = self.trades.set_index("time") - quotes = self.quotes.set_index("time") + expected = tolerance.set_index("time") + trades = trades.set_index("time") + quotes = quotes.set_index("time") result = merge_asof( trades, @@ -718,12 +714,12 @@ def test_index_tolerance(self): ) tm.assert_frame_equal(result, expected) - def test_allow_exact_matches(self): + def test_allow_exact_matches(self, trades, quotes, allow_exact_matches): result = merge_asof( - self.trades, self.quotes, on="time", by="ticker", allow_exact_matches=False + trades, quotes, on="time", by="ticker", allow_exact_matches=False ) - expected = self.allow_exact_matches + expected = allow_exact_matches tm.assert_frame_equal(result, expected) def test_allow_exact_matches_forward(self): @@ -756,17 +752,19 @@ def test_allow_exact_matches_nearest(self): ) tm.assert_frame_equal(result, expected) - def test_allow_exact_matches_and_tolerance(self): + def test_allow_exact_matches_and_tolerance( + self, trades, quotes, allow_exact_matches_and_tolerance + ): result = merge_asof( - self.trades, - self.quotes, + trades, + quotes, on="time", by="ticker", tolerance=Timedelta("100ms"), allow_exact_matches=False, ) - expected = self.allow_exact_matches_and_tolerance + expected = allow_exact_matches_and_tolerance tm.assert_frame_equal(result, expected) def test_allow_exact_matches_and_tolerance2(self): diff --git a/pandas/tests/reshape/merge/test_merge_ordered.py b/pandas/tests/reshape/merge/test_merge_ordered.py index 0268801c66e1d..4d3dc05571d1d 100644 --- a/pandas/tests/reshape/merge/test_merge_ordered.py +++ b/pandas/tests/reshape/merge/test_merge_ordered.py @@ -10,7 +10,7 @@ class TestMergeOrdered: - def setup_method(self, method): + def setup_method(self): self.left = DataFrame({"key": ["a", "c", "e"], "lvalue": [1, 2.0, 3]}) self.right = DataFrame({"key": ["b", "c", "d", "f"], "rvalue": [1, 2, 3.0, 4]}) diff --git a/pandas/tests/reshape/merge/test_multi.py b/pandas/tests/reshape/merge/test_multi.py index b5945f7542077..0dbe45eeb1e82 100644 --- a/pandas/tests/reshape/merge/test_multi.py +++ b/pandas/tests/reshape/merge/test_multi.py @@ -93,7 +93,7 @@ def test_merge_on_multikey(self, left, right, join_type): tm.assert_frame_equal(result, expected) @pytest.mark.parametrize("sort", [False, True]) - def test_left_join_multi_index(self, left, right, sort): + def test_left_join_multi_index(self, sort): icols = ["1st", "2nd", "3rd"] def bind_cols(df): diff --git a/pandas/tests/reshape/test_crosstab.py b/pandas/tests/reshape/test_crosstab.py index cc6eec671ac3a..65b126c0fd98f 100644 --- a/pandas/tests/reshape/test_crosstab.py +++ b/pandas/tests/reshape/test_crosstab.py @@ -16,7 +16,7 @@ class TestCrosstab: - def setup_method(self, method): + def setup_method(self): df = DataFrame( { "A": [ diff --git a/pandas/tests/reshape/test_melt.py b/pandas/tests/reshape/test_melt.py index ff8e5d56cdc93..cbe33642786da 100644 --- a/pandas/tests/reshape/test_melt.py +++ b/pandas/tests/reshape/test_melt.py @@ -12,7 +12,7 @@ class TestMelt: - def setup_method(self, method): + def setup_method(self): self.df = tm.makeTimeDataFrame()[:10] self.df["id1"] = (self.df["A"] > 0).astype(np.int64) self.df["id2"] = (self.df["B"] > 0).astype(np.int64) diff --git a/pandas/tests/reshape/test_pivot.py b/pandas/tests/reshape/test_pivot.py index f4719ba0bda9a..a5ae9902e07b8 100644 --- a/pandas/tests/reshape/test_pivot.py +++ b/pandas/tests/reshape/test_pivot.py @@ -39,7 +39,7 @@ def interval_values(request, closed): class TestPivotTable: - def setup_method(self, method): + def setup_method(self): self.data = DataFrame( { "A": [ @@ -1758,7 +1758,7 @@ def test_categorical_margins_category(self, observed, request): table = df.pivot_table("x", "y", "z", dropna=observed, margins=True) tm.assert_frame_equal(table, expected) - def test_margins_casted_to_float(self, observed): + def test_margins_casted_to_float(self): # GH 24893 df = DataFrame( { diff --git a/pandas/tests/scalar/test_nat.py b/pandas/tests/scalar/test_nat.py index 7850a20efc878..873103b01f64d 100644 --- a/pandas/tests/scalar/test_nat.py +++ b/pandas/tests/scalar/test_nat.py @@ -110,9 +110,11 @@ def test_identity(klass, value): @pytest.mark.parametrize("klass", [Timestamp, Timedelta, Period]) @pytest.mark.parametrize("value", ["", "nat", "NAT", None, np.nan]) -def test_equality(klass, value): +def test_equality(klass, value, request): if klass is Period and value == "": - pytest.skip("Period cannot parse empty string") + request.node.add_marker( + pytest.mark.xfail(reason="Period cannot parse empty string") + ) assert klass(value).value == iNaT diff --git a/pandas/tests/scalar/timestamp/test_comparisons.py b/pandas/tests/scalar/timestamp/test_comparisons.py index 7ed0a6aedebc1..b5084e7a8925e 100644 --- a/pandas/tests/scalar/timestamp/test_comparisons.py +++ b/pandas/tests/scalar/timestamp/test_comparisons.py @@ -12,7 +12,7 @@ class TestTimestampComparison: - def test_comparison_dt64_ndarray(self, fixed_now_ts): + def test_comparison_dt64_ndarray(self): ts = Timestamp("2021-01-01") ts2 = Timestamp("2019-04-05") arr = np.array([[ts.asm8, ts2.asm8]], dtype="M8[ns]") diff --git a/pandas/tests/series/indexing/test_indexing.py b/pandas/tests/series/indexing/test_indexing.py index b82fa1b7f23c1..3c83ac4e1f623 100644 --- a/pandas/tests/series/indexing/test_indexing.py +++ b/pandas/tests/series/indexing/test_indexing.py @@ -165,7 +165,7 @@ def test_setitem_ambiguous_keyerror(indexer_sl): tm.assert_series_equal(s2, expected) -def test_setitem(datetime_series, string_series): +def test_setitem(datetime_series): datetime_series[datetime_series.index[5]] = np.NaN datetime_series[[1, 2, 17]] = np.NaN datetime_series[6] = np.NaN diff --git a/pandas/tests/series/indexing/test_setitem.py b/pandas/tests/series/indexing/test_setitem.py index 9d1ee70c265e8..667dae55ef9df 100644 --- a/pandas/tests/series/indexing/test_setitem.py +++ b/pandas/tests/series/indexing/test_setitem.py @@ -715,7 +715,7 @@ def test_series_where(self, obj, key, expected, val, is_inplace): self._check_inplace(is_inplace, orig, arr, obj) - def test_index_where(self, obj, key, expected, val, request): + def test_index_where(self, obj, key, expected, val): if obj.dtype == bool or obj.dtype.kind == "c" or expected.dtype.kind == "c": # TODO(GH#45061): Should become unreachable (at least the bool part) pytest.skip("test not applicable for this dtype") diff --git a/pandas/tests/series/indexing/test_where.py b/pandas/tests/series/indexing/test_where.py index 9ed04885bd9e1..eabaf23bd36f8 100644 --- a/pandas/tests/series/indexing/test_where.py +++ b/pandas/tests/series/indexing/test_where.py @@ -438,7 +438,7 @@ def test_where_categorical(frame_or_series): tm.assert_equal(exp, res) -def test_where_datetimelike_categorical(request, tz_naive_fixture): +def test_where_datetimelike_categorical(tz_naive_fixture): # GH#37682 tz = tz_naive_fixture diff --git a/pandas/tests/series/methods/test_compare.py b/pandas/tests/series/methods/test_compare.py index 8570800048898..fe2016a245ec7 100644 --- a/pandas/tests/series/methods/test_compare.py +++ b/pandas/tests/series/methods/test_compare.py @@ -114,3 +114,28 @@ def test_compare_unaligned_objects(): ser1 = pd.Series([1, 2, 3]) ser2 = pd.Series([1, 2, 3, 4]) ser1.compare(ser2) + + +def test_compare_datetime64_and_string(): + # Issue https://github.com/pandas-dev/pandas/issues/45506 + # Catch OverflowError when comparing datetime64 and string + data = [ + {"a": "2015-07-01", "b": "08335394550"}, + {"a": "2015-07-02", "b": "+49 (0) 0345 300033"}, + {"a": "2015-07-03", "b": "+49(0)2598 04457"}, + {"a": "2015-07-04", "b": "0741470003"}, + {"a": "2015-07-05", "b": "04181 83668"}, + ] + dtypes = {"a": "datetime64[ns]", "b": "string"} + df = pd.DataFrame(data=data).astype(dtypes) + + result_eq1 = df["a"].eq(df["b"]) + result_eq2 = df["a"] == df["b"] + result_neq = df["a"] != df["b"] + + expected_eq = pd.Series([False] * 5) # For .eq and == + expected_neq = pd.Series([True] * 5) # For != + + tm.assert_series_equal(result_eq1, expected_eq) + tm.assert_series_equal(result_eq2, expected_eq) + tm.assert_series_equal(result_neq, expected_neq) diff --git a/pandas/tests/series/methods/test_interpolate.py b/pandas/tests/series/methods/test_interpolate.py index 8ca2d37016691..bd8b165335d09 100644 --- a/pandas/tests/series/methods/test_interpolate.py +++ b/pandas/tests/series/methods/test_interpolate.py @@ -12,6 +12,7 @@ isna, ) import pandas._testing as tm +from pandas.util.version import Version @pytest.fixture( @@ -78,7 +79,7 @@ def interp_methods_ind(request): class TestSeriesInterpolateData: - def test_interpolate(self, datetime_series, string_series): + def test_interpolate(self, datetime_series): ts = Series(np.arange(len(datetime_series), dtype=float), datetime_series.index) ts_copy = ts.copy() @@ -778,7 +779,8 @@ def test_interp_non_timedelta_index(self, interp_methods_ind, ind): with pytest.raises(ValueError, match=expected_error): df[0].interpolate(method=method, **kwargs) - def test_interpolate_timedelta_index(self, interp_methods_ind): + @td.skip_if_no_scipy + def test_interpolate_timedelta_index(self, request, interp_methods_ind): """ Tests for non numerical index types - object, period, timedelta Note that all methods except time, index, nearest and values @@ -789,17 +791,19 @@ def test_interpolate_timedelta_index(self, interp_methods_ind): df = pd.DataFrame([0, 1, np.nan, 3], index=ind) method, kwargs = interp_methods_ind - if method == "pchip": - pytest.importorskip("scipy") - - if method in {"linear", "pchip"}: - result = df[0].interpolate(method=method, **kwargs) - expected = Series([0.0, 1.0, 2.0, 3.0], name=0, index=ind) - tm.assert_series_equal(result, expected) - else: - pytest.skip( - "This interpolation method is not supported for Timedelta Index yet." + import scipy + + if method in {"cubic", "zero"} or ( + method == "barycentric" and Version(scipy.__version__) < Version("1.5.0") + ): + request.node.add_marker( + pytest.mark.xfail( + reason=f"{method} interpolation is not supported for TimedeltaIndex" + ) ) + result = df[0].interpolate(method=method, **kwargs) + expected = Series([0.0, 1.0, 2.0, 3.0], name=0, index=ind) + tm.assert_series_equal(result, expected) @pytest.mark.parametrize( "ascending, expected_values", diff --git a/pandas/tests/series/methods/test_reset_index.py b/pandas/tests/series/methods/test_reset_index.py index f38491508cc23..e7340aaf376e5 100644 --- a/pandas/tests/series/methods/test_reset_index.py +++ b/pandas/tests/series/methods/test_reset_index.py @@ -186,3 +186,23 @@ def test_reset_index_dtypes_on_empty_series_with_multiindex(array, dtype): {"level_0": np.int64, "level_1": np.float64, "level_2": dtype, 0: object} ) tm.assert_series_equal(result, expected) + + +@pytest.mark.parametrize( + "names, expected_names", + [ + (["A", "A"], ["A", "A"]), + (["level_1", None], ["level_1", "level_1"]), + ], +) +@pytest.mark.parametrize("allow_duplicates", [False, True]) +def test_column_name_duplicates(names, expected_names, allow_duplicates): + # GH#44755 reset_index with duplicate column labels + s = Series([1], index=MultiIndex.from_arrays([[1], [1]], names=names)) + if allow_duplicates: + result = s.reset_index(allow_duplicates=True) + expected = DataFrame([[1, 1, 1]], columns=expected_names + [0]) + tm.assert_frame_equal(result, expected) + else: + with pytest.raises(ValueError, match="cannot insert"): + s.reset_index() diff --git a/pandas/tests/series/test_arithmetic.py b/pandas/tests/series/test_arithmetic.py index 5fbb42789d746..f2b561c77d246 100644 --- a/pandas/tests/series/test_arithmetic.py +++ b/pandas/tests/series/test_arithmetic.py @@ -722,9 +722,7 @@ def test_align_date_objects_with_datetimeindex(self): class TestNamePreservation: @pytest.mark.parametrize("box", [list, tuple, np.array, Index, Series, pd.array]) @pytest.mark.parametrize("flex", [True, False]) - def test_series_ops_name_retention( - self, request, flex, box, names, all_binary_operators - ): + def test_series_ops_name_retention(self, flex, box, names, all_binary_operators): # GH#33930 consistent name renteiton op = all_binary_operators diff --git a/pandas/tests/series/test_ufunc.py b/pandas/tests/series/test_ufunc.py index ed07a31c24768..b0201db798789 100644 --- a/pandas/tests/series/test_ufunc.py +++ b/pandas/tests/series/test_ufunc.py @@ -176,9 +176,7 @@ def test_binary_ufunc_scalar(ufunc, sparse, flip, arrays_for_binary_ufunc): @pytest.mark.parametrize("sparse", SPARSE, ids=SPARSE_IDS) @pytest.mark.parametrize("shuffle", SHUFFLE) @pytest.mark.filterwarnings("ignore:divide by zero:RuntimeWarning") -def test_multiple_output_binary_ufuncs( - ufunc, sparse, shuffle, arrays_for_binary_ufunc, request -): +def test_multiple_output_binary_ufuncs(ufunc, sparse, shuffle, arrays_for_binary_ufunc): # Test that # the same conditions from binary_ufunc_scalar apply to # ufuncs with multiple outputs. diff --git a/pandas/tests/strings/test_strings.py b/pandas/tests/strings/test_strings.py index b72dd111f3b25..9a82110f65f83 100644 --- a/pandas/tests/strings/test_strings.py +++ b/pandas/tests/strings/test_strings.py @@ -360,9 +360,7 @@ def test_len_mixed(): ("rindex", "E", 0, 5, [4, 3, 1, 4]), ], ) -def test_index( - method, sub, start, end, index_or_series, any_string_dtype, expected, request -): +def test_index(method, sub, start, end, index_or_series, any_string_dtype, expected): obj = index_or_series( ["ABCDEFG", "BCDEFEF", "DEFGHIJEF", "EFGHEF"], dtype=any_string_dtype diff --git a/pandas/tests/test_downstream.py b/pandas/tests/test_downstream.py index b843a92850250..72ce6b837e810 100644 --- a/pandas/tests/test_downstream.py +++ b/pandas/tests/test_downstream.py @@ -124,6 +124,7 @@ def test_oo_optimized_datetime_index_unpickle(): ) +@pytest.mark.network @tm.network # Cython import warning @pytest.mark.filterwarnings("ignore:pandas.util.testing is deprecated") @@ -149,7 +150,7 @@ def test_statsmodels(): # Cython import warning @pytest.mark.filterwarnings("ignore:can't:ImportWarning") -def test_scikit_learn(df): +def test_scikit_learn(): sklearn = import_module("sklearn") # noqa:F841 from sklearn import ( @@ -164,6 +165,7 @@ def test_scikit_learn(df): # Cython import warning and traitlets +@pytest.mark.network @tm.network @pytest.mark.filterwarnings("ignore") def test_seaborn(): @@ -173,17 +175,18 @@ def test_seaborn(): seaborn.stripplot(x="day", y="total_bill", data=tips) -def test_pandas_gbq(df): +def test_pandas_gbq(): pandas_gbq = import_module("pandas_gbq") # noqa:F841 +@pytest.mark.network +@tm.network @pytest.mark.xfail( raises=ValueError, reason="The Quandl API key must be provided either through the api_key " "variable or through the environmental variable QUANDL_API_KEY", ) -@tm.network def test_pandas_datareader(): pandas_datareader = import_module("pandas_datareader") diff --git a/pandas/tests/test_expressions.py b/pandas/tests/test_expressions.py index 495fd637d01fe..a0066ace17bc4 100644 --- a/pandas/tests/test_expressions.py +++ b/pandas/tests/test_expressions.py @@ -47,10 +47,10 @@ @pytest.mark.skipif(not expr.USE_NUMEXPR, reason="not using numexpr") class TestExpressions: - def setup_method(self, method): + def setup_method(self): self._MIN_ELEMENTS = expr._MIN_ELEMENTS - def teardown_method(self, method): + def teardown_method(self): expr._MIN_ELEMENTS = self._MIN_ELEMENTS @staticmethod diff --git a/pandas/tests/test_nanops.py b/pandas/tests/test_nanops.py index fa95ff86cb6b9..c58cb0db00113 100644 --- a/pandas/tests/test_nanops.py +++ b/pandas/tests/test_nanops.py @@ -31,7 +31,7 @@ def skipna(request): class TestnanopsDataFrame: - def setup_method(self, method): + def setup_method(self): np.random.seed(11235) nanops._USE_BOTTLENECK = False @@ -95,7 +95,7 @@ def setup_method(self, method): self.arr_float1_nan_1d = self.arr_float1_nan[:, 0] self.arr_nan_float1_1d = self.arr_nan_float1[:, 0] - def teardown_method(self, method): + def teardown_method(self): nanops._USE_BOTTLENECK = use_bn def check_results(self, targ, res, axis, check_dtype=True): @@ -786,7 +786,7 @@ class TestNanvarFixedValues: # xref GH10242 - def setup_method(self, method): + def setup_method(self): # Samples from a normal distribution. self.variance = variance = 3.0 self.samples = self.prng.normal(scale=variance ** 0.5, size=100000) @@ -903,7 +903,7 @@ class TestNanskewFixedValues: # xref GH 11974 - def setup_method(self, method): + def setup_method(self): # Test data + skewness value (computed with scipy.stats.skew) self.samples = np.sin(np.linspace(0, 1, 200)) self.actual_skew = -0.1875895205961754 @@ -952,7 +952,7 @@ class TestNankurtFixedValues: # xref GH 11974 - def setup_method(self, method): + def setup_method(self): # Test data + kurtosis value (computed with scipy.stats.kurtosis) self.samples = np.sin(np.linspace(0, 1, 200)) self.actual_kurt = -1.2058303433799713 diff --git a/pandas/tests/tools/test_to_datetime.py b/pandas/tests/tools/test_to_datetime.py index 5f8e0b4f70ec4..1e05603f704a7 100644 --- a/pandas/tests/tools/test_to_datetime.py +++ b/pandas/tests/tools/test_to_datetime.py @@ -1066,6 +1066,33 @@ def test_convert_object_to_datetime_with_cache( ) tm.assert_series_equal(result_series, expected_series) + @pytest.mark.parametrize("cache", [True, False]) + @pytest.mark.parametrize( + ("input", "expected"), + ( + ( + Series([NaT] * 20 + [None] * 20, dtype="object"), # type: ignore[list-item] # noqa: E501 + Series([NaT] * 40, dtype="datetime64[ns]"), + ), + ( + Series([NaT] * 60 + [None] * 60, dtype="object"), # type: ignore[list-item] # noqa: E501 + Series([NaT] * 120, dtype="datetime64[ns]"), + ), + (Series([None] * 20), Series([NaT] * 20, dtype="datetime64[ns]")), + (Series([None] * 60), Series([NaT] * 60, dtype="datetime64[ns]")), + (Series([""] * 20), Series([NaT] * 20, dtype="datetime64[ns]")), + (Series([""] * 60), Series([NaT] * 60, dtype="datetime64[ns]")), + (Series([pd.NA] * 20), Series([NaT] * 20, dtype="datetime64[ns]")), + (Series([pd.NA] * 60), Series([NaT] * 60, dtype="datetime64[ns]")), + (Series([np.NaN] * 20), Series([NaT] * 20, dtype="datetime64[ns]")), + (Series([np.NaN] * 60), Series([NaT] * 60, dtype="datetime64[ns]")), + ), + ) + def test_to_datetime_converts_null_like_to_nat(self, cache, input, expected): + # GH35888 + result = to_datetime(input, cache=cache) + tm.assert_series_equal(result, expected) + @pytest.mark.parametrize( "date, format", [ diff --git a/pandas/tests/tools/test_to_numeric.py b/pandas/tests/tools/test_to_numeric.py index b4db174c271d4..38a50a10b3482 100644 --- a/pandas/tests/tools/test_to_numeric.py +++ b/pandas/tests/tools/test_to_numeric.py @@ -390,19 +390,19 @@ def test_timedelta(transform_assert_equal): assert_equal(result, expected) -def test_period(transform_assert_equal): +def test_period(request, transform_assert_equal): transform, assert_equal = transform_assert_equal idx = pd.period_range("2011-01", periods=3, freq="M", name="") inp = transform(idx) - if isinstance(inp, Index): - result = to_numeric(inp) - expected = transform(idx.asi8) - assert_equal(result, expected) - else: - # TODO: PeriodDtype, so support it in to_numeric. - pytest.skip("Missing PeriodDtype support in to_numeric") + if not isinstance(inp, Index): + request.node.add_marker( + pytest.mark.xfail(reason="Missing PeriodDtype support in to_numeric") + ) + result = to_numeric(inp) + expected = transform(idx.asi8) + assert_equal(result, expected) @pytest.mark.parametrize( diff --git a/pandas/tests/tseries/offsets/test_business_day.py b/pandas/tests/tseries/offsets/test_business_day.py index 482d697b15e98..58d3985913994 100644 --- a/pandas/tests/tseries/offsets/test_business_day.py +++ b/pandas/tests/tseries/offsets/test_business_day.py @@ -34,7 +34,7 @@ class TestBusinessDay(Base): _offset = BDay - def setup_method(self, method): + def setup_method(self): self.d = datetime(2008, 1, 1) self.nd = np.datetime64("2008-01-01 00:00:00") diff --git a/pandas/tests/tseries/offsets/test_business_hour.py b/pandas/tests/tseries/offsets/test_business_hour.py index 401bfe664a3a2..314308c7e06f0 100644 --- a/pandas/tests/tseries/offsets/test_business_hour.py +++ b/pandas/tests/tseries/offsets/test_business_hour.py @@ -32,7 +32,7 @@ class TestBusinessHour(Base): _offset = BusinessHour - def setup_method(self, method): + def setup_method(self): self.d = datetime(2014, 7, 1, 10, 00) self.offset1 = BusinessHour() diff --git a/pandas/tests/tseries/offsets/test_custom_business_hour.py b/pandas/tests/tseries/offsets/test_custom_business_hour.py index dbc0ff4371fd9..3fc20df2d930b 100644 --- a/pandas/tests/tseries/offsets/test_custom_business_hour.py +++ b/pandas/tests/tseries/offsets/test_custom_business_hour.py @@ -26,7 +26,7 @@ class TestCustomBusinessHour(Base): _offset = CustomBusinessHour holidays = ["2014-06-27", datetime(2014, 6, 30), np.datetime64("2014-07-02")] - def setup_method(self, method): + def setup_method(self): # 2014 Calendar to check custom holidays # Sun Mon Tue Wed Thu Fri Sat # 6/22 23 24 25 26 27 28 diff --git a/pandas/tests/tseries/offsets/test_custom_business_month.py b/pandas/tests/tseries/offsets/test_custom_business_month.py index fb0f331fa3ad3..935213229a65a 100644 --- a/pandas/tests/tseries/offsets/test_custom_business_month.py +++ b/pandas/tests/tseries/offsets/test_custom_business_month.py @@ -35,7 +35,7 @@ class CustomBusinessMonthBase: - def setup_method(self, method): + def setup_method(self): self.d = datetime(2008, 1, 1) self.offset = self._offset() self.offset1 = self.offset diff --git a/pandas/tests/tseries/offsets/test_offsets.py b/pandas/tests/tseries/offsets/test_offsets.py index 5dcfd0019e93f..3a9dde59dcef3 100644 --- a/pandas/tests/tseries/offsets/test_offsets.py +++ b/pandas/tests/tseries/offsets/test_offsets.py @@ -537,7 +537,7 @@ def test_offsets_hashable(self, offset_types): class TestDateOffset(Base): - def setup_method(self, method): + def setup_method(self): self.d = Timestamp(datetime(2008, 1, 2)) _offset_map.clear() @@ -622,7 +622,7 @@ def test_get_offset_legacy(): class TestOffsetAliases: - def setup_method(self, method): + def setup_method(self): _offset_map.clear() def test_alias_equality(self): diff --git a/pandas/tests/window/test_numba.py b/pandas/tests/window/test_numba.py index a9e38751c9a2f..2c9ae3d70f218 100644 --- a/pandas/tests/window/test_numba.py +++ b/pandas/tests/window/test_numba.py @@ -1,6 +1,12 @@ +import os + import numpy as np import pytest +from pandas.compat import ( + is_platform_mac, + is_platform_windows, +) from pandas.errors import NumbaUtilError import pandas.util._test_decorators as td @@ -13,6 +19,15 @@ import pandas._testing as tm from pandas.core.util.numba_ import NUMBA_FUNC_CACHE +# TODO(GH#44584): Mark these as pytest.mark.single +pytestmark = pytest.mark.skipif( + os.environ.get("PANDAS_CI", "0") == "1" + and (is_platform_windows() or is_platform_mac()), + reason="On Azure CI, Windows can fail with " + "'Windows fatal exception: stack overflow' " + "and MacOS can timeout", +) + @pytest.fixture(params=["single", "table"]) def method(request): diff --git a/pandas/tests/window/test_online.py b/pandas/tests/window/test_online.py index 80cf1c55958ee..543e5e4e545e0 100644 --- a/pandas/tests/window/test_online.py +++ b/pandas/tests/window/test_online.py @@ -1,6 +1,12 @@ +import os + import numpy as np import pytest +from pandas.compat import ( + is_platform_mac, + is_platform_windows, +) import pandas.util._test_decorators as td from pandas import ( @@ -9,6 +15,15 @@ ) import pandas._testing as tm +# TODO(GH#44584): Mark these as pytest.mark.single +pytestmark = pytest.mark.skipif( + os.environ.get("PANDAS_CI", "0") == "1" + and (is_platform_windows() or is_platform_mac()), + reason="On Azure CI, Windows can fail with " + "'Windows fatal exception: stack overflow' " + "and MacOS can timeout", +) + @td.skip_if_no("numba") @pytest.mark.filterwarnings("ignore:\n") diff --git a/pandas/util/_test_decorators.py b/pandas/util/_test_decorators.py index 78ef335adf948..10322a25ffd18 100644 --- a/pandas/util/_test_decorators.py +++ b/pandas/util/_test_decorators.py @@ -266,7 +266,8 @@ def file_leak_context(): ContextManager analogue to check_file_leaks. """ psutil = safe_import("psutil") - if not psutil: + if not psutil or is_platform_windows(): + # Checking for file leaks can hang on Windows CI yield else: proc = psutil.Process() From dcbf2f17c90a84f71159f23a08a9ab40313a84de Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 31 Jan 2022 21:06:04 -0800 Subject: [PATCH 05/10] implement isetitem --- pandas/core/frame.py | 23 +++++++++++++++++++++++ pandas/core/indexing.py | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index d5b32d7a5dea0..ba66c55d325e8 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -3642,6 +3642,29 @@ def _get_value(self, index, col, takeable: bool = False) -> Scalar: loc = engine.get_loc(index) return series._values[loc] + def isetitem(self, loc, value) -> None: + """ + Set the given value in the column with position 'loc'. + + This is a positional analogue to __setitem__. + + Parameters + ---------- + loc : int or sequence of ints + value : scalar or arraylike + + Notes + ----- + Unlike `frame.iloc[:, i] = value`, `frame.isetitem(loc, value)` will + _never_ try to set the values in place, but will always insert a new + array. + + In cases where `frame.columns` is unique, this is equivalent to + `frame[frame.columns[i]] = value`. + """ + arraylike = self._sanitize_column(value) + self._iset_item_mgr(loc, arraylike, inplace=False) + def __setitem__(self, key, value): key = com.apply_if_callable(key, self) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 785ddf5e29f1b..92848485a232d 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -2010,7 +2010,7 @@ def _setitem_single_column(self, loc: int, value, plane_indexer): "to set the values inplace instead of always setting a new " "array. To retain the old behavior, use either " "`df[df.columns[i]] = newvals` or, if columns are non-unique, " - "`df.iloc(axis=1)[i] = newvals`.", + "`df.isetitem(i, newvals)`", FutureWarning, stacklevel=find_stack_level(), ) From b8e93447ff55b95a5157056d622f465fef32f187 Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 15 Feb 2022 11:50:49 -0800 Subject: [PATCH 06/10] fix test --- pandas/tests/frame/methods/test_quantile.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pandas/tests/frame/methods/test_quantile.py b/pandas/tests/frame/methods/test_quantile.py index 63407ba47c50e..6a454544287ca 100644 --- a/pandas/tests/frame/methods/test_quantile.py +++ b/pandas/tests/frame/methods/test_quantile.py @@ -674,9 +674,7 @@ def test_quantile_ea_with_na(self, obj, index): # TODO(GH#39763): filtering can be removed after GH#39763 is fixed @pytest.mark.filterwarnings("ignore:Using .astype to convert:FutureWarning") def test_quantile_ea_all_na(self, obj, index): - msg = "will attempt to set the values inplace" - with tm.assert_produces_warning(FutureWarning, match=msg): - obj.iloc[:] = index._na_value + obj.iloc[:] = index._na_value # TODO(ArrayManager): this casting should be unnecessary after GH#39763 is fixed obj = obj.astype(index.dtype) From f2b119fafa99376ae0f1a33624bd56cfcd309d93 Mon Sep 17 00:00:00 2001 From: Brock Date: Tue, 15 Feb 2022 12:06:22 -0800 Subject: [PATCH 07/10] whatsnew --- doc/source/whatsnew/v1.5.0.rst | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index 71394a858aefe..2cfc63226f4f8 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -229,6 +229,73 @@ that their usage is considered unsafe, and can lead to unexpected results. See the documentation of :class:`ExcelWriter` for further details. +.. _whatsnew_150.notable_bug_fixes.setitem_column_try_inplace: + _ see also _whatsnew_130.notable_bug_fixes.setitem_column_try_inplace + +Try operating inplace when setting values with ``loc`` and ``iloc`` +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Most of the time setting values with ``frame.iloc`` attempts to set values +in-place, only falling back to inserting a new array if necessary. In the past, +setting entire columns has been an exception to this rule: + +.. ipython:: python + + values = np.arange(4).reshape(2, 2) + df = pd.DataFrame(values) + ser = df[0] + +*Old behavior*: + +.. code-block:: ipython + + In [3]: df.iloc[:, 0] = np.array([10, 11]) + In [4]: ser + Out[4]: + 0 0 + 1 2 + Name: 0, dtype: int64 + +This behavior is deprecated. In a future version, setting an entire column with +iloc will attempt to operate inplace. + +*Future behavior*: + +.. code-block:: ipython + + In [3]: df.iloc[:, 0] = np.array([10, 11]) + In [4]: ser + Out[4]: + 0 10 + 1 11 + Name: 0, dtype: int64 + +To get the old behavior, use :meth:`DataFrame.__setitem__` directly: + +*Future behavior*: + +.. code-block:: ipython + + In [5]: df[0] = np.array([21, 31]) + In [4]: ser + Out[4]: + 0 10 + 1 11 + Name: 0, dtype: int64 + +In the case where ``df.columns`` is not unique, use :meth:`DataFrame.isetitem`: + +*Future behavior*: + +.. code-block:: ipython + + In [5]: df.columns = ["A", "A"] + In [5]: df.isetitem(0, np.array([21, 31])) + In [4]: ser + Out[4]: + 0 10 + 1 11 + Name: 0, dtype: int64 + .. _whatsnew_150.deprecations.other: Other Deprecations From 048d7772d08e10f56b6c4bd8a3551a8146ba6539 Mon Sep 17 00:00:00 2001 From: Brock Date: Wed, 16 Feb 2022 11:03:03 -0800 Subject: [PATCH 08/10] Fix test for ArrayManager --- pandas/tests/frame/indexing/test_indexing.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/pandas/tests/frame/indexing/test_indexing.py b/pandas/tests/frame/indexing/test_indexing.py index 6e27b1554549c..f660e04100d3a 100644 --- a/pandas/tests/frame/indexing/test_indexing.py +++ b/pandas/tests/frame/indexing/test_indexing.py @@ -1085,7 +1085,7 @@ def test_loc_duplicates(self): df.loc[trange[bool_idx], "A"] += 6 tm.assert_frame_equal(df, expected) - def test_setitem_with_unaligned_tz_aware_datetime_column(self, using_array_manager): + def test_setitem_with_unaligned_tz_aware_datetime_column(self): # GH 12981 # Assignment of unaligned offset-aware datetime series. # Make sure timezone isn't lost @@ -1094,11 +1094,8 @@ def test_setitem_with_unaligned_tz_aware_datetime_column(self, using_array_manag df["dates"] = column[[1, 0, 2]] tm.assert_series_equal(df["dates"], column) - warn = FutureWarning if using_array_manager else None - msg = "will attempt to set the values inplace" df = DataFrame({"dates": column}) - with tm.assert_produces_warning(warn, match=msg): - df.loc[[0, 1, 2], "dates"] = column[[1, 0, 2]] + df.loc[[0, 1, 2], "dates"] = column[[1, 0, 2]] tm.assert_series_equal(df["dates"], column) def test_loc_setitem_datetimelike_with_inference(self): From 4d4ba5cf4198309366f8ed16519fb5c90f302b95 Mon Sep 17 00:00:00 2001 From: Brock Date: Thu, 17 Feb 2022 08:44:53 -0800 Subject: [PATCH 09/10] fix test with arrayManager --- pandas/tests/indexing/test_iloc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 7d2e657d6c767..1b2ce2b1f2585 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -81,7 +81,7 @@ def test_iloc_setitem_fullcol_categorical(self, indexer, key, using_array_manage overwrite = isinstance(key, slice) and key == slice(None) warn = None - if overwrite or using_array_manager: + if overwrite: warn = FutureWarning msg = "will attempt to set the values inplace instead" with tm.assert_produces_warning(warn, match=msg): From 4e5c65d50e26567f3f75eb9496e2c2e280156c6f Mon Sep 17 00:00:00 2001 From: Brock Date: Thu, 12 May 2022 19:26:38 -0700 Subject: [PATCH 10/10] empty commit to force CI