Skip to content

Commit e255e56

Browse files
authored
DEPR: Series/DataFrame/HDFStore.iteritems() (#45321)
1 parent e84b9ee commit e255e56

File tree

12 files changed

+57
-16
lines changed

12 files changed

+57
-16
lines changed

doc/source/user_guide/scale.rst

+2
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ column names and dtypes. That's because Dask hasn't actually read the data yet.
275275
Rather than executing immediately, doing operations build up a **task graph**.
276276

277277
.. ipython:: python
278+
:okwarning:
278279
279280
ddf
280281
ddf["name"]
@@ -333,6 +334,7 @@ known automatically. In this case, since we created the parquet files manually,
333334
we need to supply the divisions manually.
334335

335336
.. ipython:: python
337+
:okwarning:
336338
337339
N = 12
338340
starts = [f"20{i:>02d}-01-01" for i in range(N)]

doc/source/whatsnew/v1.5.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ Other API changes
9595
Deprecations
9696
~~~~~~~~~~~~
9797
- Deprecated the keyword ``line_terminator`` in :meth:`DataFrame.to_csv` and :meth:`Series.to_csv`, use ``lineterminator`` instead; this is for consistency with :func:`read_csv` and the standard library 'csv' module (:issue:`9568`)
98+
- Deprecated :meth:`DataFrame.iteritems`, :meth:`Series.iteritems`, :meth:`HDFStore.iteritems` in favor of :meth:`DataFrame.items`, :meth:`Series.items`, :meth:`HDFStore.items` (:issue:`45321`)
9899
-
99100

100101
.. ---------------------------------------------------------------------------

pandas/core/arrays/sparse/accessor.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ def to_coo(self):
339339
dtype = dtype.subtype
340340

341341
cols, rows, data = [], [], []
342-
for col, (_, ser) in enumerate(self._parent.iteritems()):
342+
for col, (_, ser) in enumerate(self._parent.items()):
343343
sp_arr = ser.array
344344
if sp_arr.fill_value != 0:
345345
raise ValueError("fill value must be 0 when converting to COO matrix")

pandas/core/frame.py

+6
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,12 @@ def items(self) -> Iterable[tuple[Hashable, Series]]:
12761276

12771277
@Appender(_shared_docs["items"])
12781278
def iteritems(self) -> Iterable[tuple[Hashable, Series]]:
1279+
warnings.warn(
1280+
"iteritems is deprecated and will be removed in a future version. "
1281+
"Use .items instead.",
1282+
FutureWarning,
1283+
stacklevel=find_stack_level(),
1284+
)
12791285
yield from self.items()
12801286

12811287
def iterrows(self) -> Iterable[tuple[Hashable, Series]]:

pandas/core/generic.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -1989,10 +1989,6 @@ def items(self):
19891989
for h in self._info_axis:
19901990
yield h, self[h]
19911991

1992-
@doc(items)
1993-
def iteritems(self):
1994-
return self.items()
1995-
19961992
def __len__(self) -> int:
19971993
"""Returns length of info axis"""
19981994
return len(self._info_axis)
@@ -5855,19 +5851,20 @@ def astype(
58555851
new_type = dtype[self.name]
58565852
return self.astype(new_type, copy, errors)
58575853

5858-
for col_name in dtype.keys():
5854+
# GH#44417 cast to Series so we can use .iat below, which will be
5855+
# robust in case we
5856+
from pandas import Series
5857+
5858+
dtype_ser = Series(dtype, dtype=object)
5859+
5860+
for col_name in dtype_ser.index:
58595861
if col_name not in self:
58605862
raise KeyError(
58615863
"Only a column name can be used for the "
58625864
"key in a dtype mappings argument. "
58635865
f"'{col_name}' not found in columns."
58645866
)
58655867

5866-
# GH#44417 cast to Series so we can use .iat below, which will be
5867-
# robust in case we
5868-
from pandas import Series
5869-
5870-
dtype_ser = Series(dtype, dtype=object)
58715868
dtype_ser = dtype_ser.reindex(self.columns, fill_value=None, copy=False)
58725869

58735870
results = []

pandas/core/series.py

+6
Original file line numberDiff line numberDiff line change
@@ -1705,6 +1705,12 @@ def items(self) -> Iterable[tuple[Hashable, Any]]:
17051705

17061706
@Appender(items.__doc__)
17071707
def iteritems(self) -> Iterable[tuple[Hashable, Any]]:
1708+
warnings.warn(
1709+
"iteritems is deprecated and will be removed in a future version. "
1710+
"Use .items instead.",
1711+
FutureWarning,
1712+
stacklevel=find_stack_level(),
1713+
)
17081714
return self.items()
17091715

17101716
# ----------------------------------------------------------------------

pandas/io/pytables.py

+11-1
Original file line numberDiff line numberDiff line change
@@ -692,7 +692,17 @@ def items(self):
692692
for g in self.groups():
693693
yield g._v_pathname, g
694694

695-
iteritems = items
695+
def iteritems(self):
696+
"""
697+
iterate on key->group
698+
"""
699+
warnings.warn(
700+
"iteritems is deprecated and will be removed in a future version. "
701+
"Use .items instead.",
702+
FutureWarning,
703+
stacklevel=find_stack_level(),
704+
)
705+
yield from self.items()
696706

697707
def open(self, mode: str = "a", **kwargs):
698708
"""

pandas/tests/frame/test_api.py

+5
Original file line numberDiff line numberDiff line change
@@ -366,3 +366,8 @@ def test_inspect_getmembers(self):
366366
df = DataFrame()
367367
with tm.assert_produces_warning(None):
368368
inspect.getmembers(df)
369+
370+
def test_dataframe_iteritems_deprecated(self):
371+
df = DataFrame([1])
372+
with tm.assert_produces_warning(FutureWarning):
373+
next(df.iteritems())

pandas/tests/groupby/test_apply.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ def test_apply_series_return_dataframe_groups():
843843
)
844844

845845
def most_common_values(df):
846-
return Series({c: s.value_counts().index[0] for c, s in df.iteritems()})
846+
return Series({c: s.value_counts().index[0] for c, s in df.items()})
847847

848848
result = tdf.groupby("day").apply(most_common_values)["userId"]
849849
expected = Series(

pandas/tests/io/pytables/test_store.py

+9
Original file line numberDiff line numberDiff line change
@@ -1011,3 +1011,12 @@ def test_to_hdf_with_object_column_names(setup_path):
10111011
df.to_hdf(path, "df", format="table", data_columns=True)
10121012
result = read_hdf(path, "df", where=f"index = [{df.index[0]}]")
10131013
assert len(result)
1014+
1015+
1016+
def test_hdfstore_iteritems_deprecated(setup_path):
1017+
with ensure_clean_path(setup_path) as path:
1018+
df = DataFrame({"a": [1]})
1019+
with HDFStore(path, mode="w") as hdf:
1020+
hdf.put("table", df)
1021+
with tm.assert_produces_warning(FutureWarning):
1022+
next(hdf.iteritems())

pandas/tests/series/test_api.py

+5
Original file line numberDiff line numberDiff line change
@@ -203,3 +203,8 @@ def test_series_datetimelike_attribute_access_invalid(self):
203203
msg = "'Series' object has no attribute 'weekday'"
204204
with pytest.raises(AttributeError, match=msg):
205205
ser.weekday
206+
207+
def test_series_iteritems_deprecated(self):
208+
ser = Series([1])
209+
with tm.assert_produces_warning(FutureWarning):
210+
next(ser.iteritems())

pandas/tests/series/test_iteration.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ def test_iter_strings(self, string_series):
1111
assert val == string_series[i]
1212

1313
def test_iteritems_datetimes(self, datetime_series):
14-
for idx, val in datetime_series.iteritems():
14+
for idx, val in datetime_series.items():
1515
assert val == datetime_series[idx]
1616

1717
def test_iteritems_strings(self, string_series):
18-
for idx, val in string_series.iteritems():
18+
for idx, val in string_series.items():
1919
assert val == string_series[idx]
2020

2121
# assert is lazy (generators don't define reverse, lists do)
22-
assert not hasattr(string_series.iteritems(), "reverse")
22+
assert not hasattr(string_series.items(), "reverse")
2323

2424
def test_items_datetimes(self, datetime_series):
2525
for idx, val in datetime_series.items():

0 commit comments

Comments
 (0)