Skip to content

Commit 397bf66

Browse files
committed
DEPR: deprecate DataFrame.iteritems and Series.iteritems
1 parent 68b1da7 commit 397bf66

File tree

31 files changed

+90
-79
lines changed

31 files changed

+90
-79
lines changed

doc/source/development/contributing_docstring.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ examples:
522522
* ``loc`` and ``iloc``, as they do the same, but in one case providing indices
523523
and in the other positions
524524
* ``max`` and ``min``, as they do the opposite
525-
* ``iterrows``, ``itertuples`` and ``iteritems``, as it is easy that a user
525+
* ``iterrows``, ``itertuples`` and ``items``, as it is easy that a user
526526
looking for the method to iterate over columns ends up in the method to
527527
iterate over rows, and vice-versa
528528
* ``fillna`` and ``dropna``, as both methods are used to handle missing values

doc/source/getting_started/basics.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,7 +1475,7 @@ Thus, for example, iterating over a DataFrame gives you the column names:
14751475
print(col)
14761476
14771477
1478-
Pandas objects also have the dict-like :meth:`~DataFrame.iteritems` method to
1478+
Pandas objects also have the dict-like :meth:`~DataFrame.items` method to
14791479
iterate over the (key, value) pairs.
14801480

14811481
To iterate over the rows of a DataFrame, you can use the following methods:
@@ -1524,10 +1524,10 @@ To iterate over the rows of a DataFrame, you can use the following methods:
15241524
15251525
df
15261526
1527-
iteritems
1527+
items
15281528
~~~~~~~~~
15291529

1530-
Consistent with the dict-like interface, :meth:`~DataFrame.iteritems` iterates
1530+
Consistent with the dict-like interface, :meth:`~DataFrame.items` iterates
15311531
through key-value pairs:
15321532

15331533
* **Series**: (index, scalar value) pairs
@@ -1537,7 +1537,7 @@ For example:
15371537

15381538
.. ipython:: python
15391539
1540-
for item, frame in df.iteritems():
1540+
for item, frame in df.items():
15411541
print(item)
15421542
print(frame)
15431543

doc/source/reference/frame.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Indexing, iteration
6969
DataFrame.__iter__
7070
DataFrame.items
7171
DataFrame.keys
72-
DataFrame.iteritems
72+
DataFrame.items
7373
DataFrame.iterrows
7474
DataFrame.itertuples
7575
DataFrame.lookup

doc/source/reference/series.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ Indexing, iteration
7777
Series.loc
7878
Series.iloc
7979
Series.__iter__
80-
Series.iteritems
8180
Series.items
8281
Series.keys
8382
Series.pop

doc/source/whatsnew/v0.25.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ Other API Changes
224224
Deprecations
225225
~~~~~~~~~~~~
226226

227+
- ``DataFrame.iteritems`` and ``Series.iteritems`` have been deprecated. :attr:`DataFrame.items` and :attr:`Series.items` provide the exact same functionality and should be used instead (:issue:`26114`).
227228
- Deprecated the `M (months)` and `Y (year)` `units` parameter of :func: `pandas.to_timedelta`, :func: `pandas.Timedelta` and :func: `pandas.TimedeltaIndex` (:issue:`16344`)
228229
- The functions :func:`pandas.to_datetime` and :func:`pandas.to_timedelta` have deprecated the ``box`` keyword. Instead, use :meth:`to_numpy` or :meth:`Timestamp.to_datetime64`/:meth:`Timedelta.to_timedelta64`. (:issue:`24416`)
229230

pandas/core/frame.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
ABCSeries, ABCDataFrame, ABCIndexClass, ABCMultiIndex)
7373
from pandas.core.dtypes.missing import isna, notna
7474

75-
from pandas.core import algorithms
75+
from pandas.core import algorithms, generic
7676
from pandas.core import common as com
7777
from pandas.core import nanops
7878
from pandas.core import ops
@@ -720,7 +720,7 @@ def style(self):
720720
from pandas.io.formats.style import Styler
721721
return Styler(self)
722722

723-
def iteritems(self):
723+
def items(self):
724724
r"""
725725
Iterator over (column name, Series) pairs.
726726
@@ -751,7 +751,7 @@ def iteritems(self):
751751
panda bear 1864
752752
polar bear 22000
753753
koala marsupial 80000
754-
>>> for label, content in df.iteritems():
754+
>>> for label, content in df.items():
755755
... print('label:', label)
756756
... print('content:', content, sep='\n')
757757
...
@@ -792,7 +792,7 @@ def iterrows(self):
792792
See Also
793793
--------
794794
itertuples : Iterate over DataFrame rows as namedtuples of the values.
795-
iteritems : Iterate over (column name, Series) pairs.
795+
items : Iterate over (column name, Series) pairs.
796796
797797
Notes
798798
-----
@@ -850,7 +850,7 @@ def itertuples(self, index=True, name="Pandas"):
850850
--------
851851
DataFrame.iterrows : Iterate over DataFrame rows as (index, Series)
852852
pairs.
853-
DataFrame.iteritems : Iterate over (column name, Series) pairs.
853+
DataFrame.items : Iterate over (column name, Series) pairs.
854854
855855
Notes
856856
-----
@@ -907,7 +907,12 @@ def itertuples(self, index=True, name="Pandas"):
907907
# fallback to regular tuples
908908
return zip(*arrays)
909909

910-
items = iteritems
910+
@Appender(generic._shared_docs["iteritems"] % _shared_doc_kwargs)
911+
def iteritems(self):
912+
warnings.warn("'iteritems' is deprecated and will be removed in a "
913+
"future version. Please use `items` instead.",
914+
FutureWarning, stacklevel=2)
915+
return self.items()
911916

912917
def __len__(self):
913918
"""
@@ -2528,7 +2533,7 @@ def memory_usage(self, index=True, deep=False):
25282533
5168
25292534
"""
25302535
result = Series([c.memory_usage(index=False, deep=deep)
2531-
for col, c in self.iteritems()], index=self.columns)
2536+
for col, c in self.items()], index=self.columns)
25322537
if index:
25332538
result = Series(self.index.memory_usage(deep=deep),
25342539
index=['Index']).append(result)
@@ -4723,7 +4728,7 @@ def f(vals):
47234728
if not diff.empty:
47244729
raise KeyError(diff)
47254730

4726-
vals = (col.values for name, col in self.iteritems()
4731+
vals = (col.values for name, col in self.items()
47274732
if name in subset)
47284733
labels, shape = map(list, zip(*map(f, vals)))
47294734

@@ -6987,7 +6992,7 @@ def round(self, decimals=0, *args, **kwargs):
69876992
from pandas.core.reshape.concat import concat
69886993

69896994
def _dict_round(df, decimals):
6990-
for col, vals in df.iteritems():
6995+
for col, vals in df.items():
69916996
try:
69926997
yield _series_round(vals, decimals[col])
69936998
except KeyError:
@@ -7008,7 +7013,7 @@ def _series_round(s, decimals):
70087013
elif is_integer(decimals):
70097014
# Dispatch to Series.round
70107015
new_cols = [_series_round(v, decimals)
7011-
for _, v in self.iteritems()]
7016+
for _, v in self.items()]
70127017
else:
70137018
raise TypeError("decimals must be an integer, a dict-like or a "
70147019
"Series")

pandas/core/generic.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ def _get_space_character_free_column_resolvers(self):
430430
from pandas.core.computation.common import _remove_spaces_column_name
431431

432432
return {_remove_spaces_column_name(k): v for k, v
433-
in self.iteritems()}
433+
in self.items()}
434434

435435
@property
436436
def _info_axis(self):
@@ -1857,15 +1857,27 @@ def keys(self):
18571857
"""
18581858
return self._info_axis
18591859

1860-
def iteritems(self):
1860+
def items(self):
18611861
"""Iterate over (label, values) on info axis
18621862
1863-
This is index for Series, columns for DataFrame, major_axis for Panel,
1864-
and so on.
1863+
This is index for Series and columns for DataFrame.
18651864
"""
18661865
for h in self._info_axis:
18671866
yield h, self[h]
18681867

1868+
_shared_docs['iteritems'] = ("""Iterate over (label, values) on info axis
1869+
1870+
.. deprecated :: 0.25.0
1871+
Use :attr:`%(klass)s.items` instead.
1872+
""")
1873+
1874+
@Appender(_shared_docs["iteritems"] % _shared_doc_kwargs)
1875+
def iteritems(self):
1876+
warnings.warn("'iteritems' is deprecated and will be removed in a "
1877+
"future version. Please use `items` instead.",
1878+
FutureWarning, stacklevel=2)
1879+
return self.items()
1880+
18691881
def __len__(self):
18701882
"""Returns length of info axis"""
18711883
return len(self._info_axis)
@@ -5706,7 +5718,7 @@ def astype(self, dtype, copy=True, errors='raise', **kwargs):
57065718
raise KeyError('Only a column name can be used for the '
57075719
'key in a dtype mappings argument.')
57085720
results = []
5709-
for col_name, col in self.iteritems():
5721+
for col_name, col in self.items():
57105722
if col_name in dtype:
57115723
results.append(col.astype(dtype=dtype[col_name], copy=copy,
57125724
errors=errors, **kwargs))
@@ -6110,7 +6122,7 @@ def fillna(self, value=None, method=None, axis=None, inplace=False,
61106122
elif self.ndim == 3:
61116123
# fill in 2d chunks
61126124
result = {col: s.fillna(method=method, value=value)
6113-
for col, s in self.iteritems()}
6125+
for col, s in self.items()}
61146126
prelim_obj = self._constructor.from_dict(result)
61156127
new_obj = prelim_obj.__finalize__(self)
61166128
new_data = new_obj._data
@@ -9861,7 +9873,7 @@ def describe_1d(data):
98619873
else:
98629874
data = self.select_dtypes(include=include, exclude=exclude)
98639875

9864-
ldesc = [describe_1d(s) for _, s in data.iteritems()]
9876+
ldesc = [describe_1d(s) for _, s in data.items()]
98659877
# set a convenient order for rows
98669878
names = []
98679879
ldesc_indexes = sorted((x.index for x in ldesc), key=len)

pandas/core/indexes/multi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ def from_frame(cls, df, sortorder=None, names=None):
511511
if not isinstance(df, ABCDataFrame):
512512
raise TypeError("Input must be a DataFrame")
513513

514-
column_names, columns = lzip(*df.iteritems())
514+
column_names, columns = lzip(*df.items())
515515
names = column_names if names is None else names
516516
return cls.from_arrays(columns, sortorder=sortorder, names=names)
517517

pandas/core/panel.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ def to_excel(self, path, na_rep='', engine=None, **kwargs):
452452
writer = path
453453
kwargs['na_rep'] = na_rep
454454

455-
for item, df in self.iteritems():
455+
for item, df in self.items():
456456
name = str(item)
457457
df.to_excel(writer, name, **kwargs)
458458
writer.save()

pandas/core/reshape/pivot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def _compute_grand_margin(data, values, aggfunc,
223223

224224
if values:
225225
grand_margin = {}
226-
for k, v in data[values].iteritems():
226+
for k, v in data[values].items():
227227
try:
228228
if isinstance(aggfunc, str):
229229
grand_margin[k] = getattr(v, aggfunc)()

0 commit comments

Comments
 (0)