Skip to content

Commit 86c220a

Browse files
committed
DEPR: deprecate (DataFrame|Series).iteritems
1 parent c6a7cc1 commit 86c220a

31 files changed

+91
-78
lines changed

doc/source/development/contributing_docstring.rst

+1-1
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

+4-4
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

+1-1
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

-1
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

+2
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,8 @@ Other Deprecations
372372
the :meth:`SparseArray.to_dense` method instead (:issue:`26421`).
373373
- 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` or :meth:`Timedelta.to_timedelta64`. (:issue:`24416`)
374374
- The :meth:`DataFrame.compound` and :meth:`Series.compound` methods are deprecated and will be removed in a future version (:issue:`26405`).
375+
- ``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`).
376+
375377

376378
.. _whatsnew_0250.prior_deprecations:
377379

pandas/core/frame.py

+15-10
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
ABCSeries, ABCDataFrame, ABCIndexClass, ABCMultiIndex)
7474
from pandas.core.dtypes.missing import isna, notna
7575

76-
from pandas.core import algorithms
76+
from pandas.core import algorithms, generic
7777
from pandas.core import common as com
7878
from pandas.core import nanops
7979
from pandas.core import ops
@@ -721,7 +721,7 @@ def style(self):
721721
from pandas.io.formats.style import Styler
722722
return Styler(self)
723723

724-
def iteritems(self):
724+
def items(self):
725725
r"""
726726
Iterator over (column name, Series) pairs.
727727
@@ -752,7 +752,7 @@ def iteritems(self):
752752
panda bear 1864
753753
polar bear 22000
754754
koala marsupial 80000
755-
>>> for label, content in df.iteritems():
755+
>>> for label, content in df.items():
756756
... print('label:', label)
757757
... print('content:', content, sep='\n')
758758
...
@@ -793,7 +793,7 @@ def iterrows(self):
793793
See Also
794794
--------
795795
itertuples : Iterate over DataFrame rows as namedtuples of the values.
796-
iteritems : Iterate over (column name, Series) pairs.
796+
items : Iterate over (column name, Series) pairs.
797797
798798
Notes
799799
-----
@@ -851,7 +851,7 @@ def itertuples(self, index=True, name="Pandas"):
851851
--------
852852
DataFrame.iterrows : Iterate over DataFrame rows as (index, Series)
853853
pairs.
854-
DataFrame.iteritems : Iterate over (column name, Series) pairs.
854+
DataFrame.items : Iterate over (column name, Series) pairs.
855855
856856
Notes
857857
-----
@@ -908,7 +908,12 @@ def itertuples(self, index=True, name="Pandas"):
908908
# fallback to regular tuples
909909
return zip(*arrays)
910910

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

913918
def __len__(self):
914919
"""
@@ -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)
@@ -4735,7 +4740,7 @@ def f(vals):
47354740
if not diff.empty:
47364741
raise KeyError(diff)
47374742

4738-
vals = (col.values for name, col in self.iteritems()
4743+
vals = (col.values for name, col in self.items()
47394744
if name in subset)
47404745
labels, shape = map(list, zip(*map(f, vals)))
47414746

@@ -7008,7 +7013,7 @@ def round(self, decimals=0, *args, **kwargs):
70087013
from pandas.core.reshape.concat import concat
70097014

70107015
def _dict_round(df, decimals):
7011-
for col, vals in df.iteritems():
7016+
for col, vals in df.items():
70127017
try:
70137018
yield _series_round(vals, decimals[col])
70147019
except KeyError:
@@ -7029,7 +7034,7 @@ def _series_round(s, decimals):
70297034
elif is_integer(decimals):
70307035
# Dispatch to Series.round
70317036
new_cols = [_series_round(v, decimals)
7032-
for _, v in self.iteritems()]
7037+
for _, v in self.items()]
70337038
else:
70347039
raise TypeError("decimals must be an integer, a dict-like or a "
70357040
"Series")

pandas/core/generic.py

+19-6
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):
@@ -1873,14 +1873,27 @@ def keys(self):
18731873
"""
18741874
return self._info_axis
18751875

1876-
def iteritems(self):
1876+
def items(self):
18771877
"""Iterate over (label, values) on info axis
18781878
1879-
This is index for Series, columns for DataFrame and so on.
1879+
This is index for Series and columns for DataFrame.
18801880
"""
18811881
for h in self._info_axis:
18821882
yield h, self[h]
18831883

1884+
_shared_docs['iteritems'] = ("""Iterate over (label, values) on info axis
1885+
1886+
.. deprecated :: 0.25.0
1887+
Use :attr:`%(klass)s.items` instead.
1888+
""")
1889+
1890+
@Appender(_shared_docs["iteritems"] % _shared_doc_kwargs)
1891+
def iteritems(self):
1892+
warnings.warn("'iteritems' is deprecated and will be removed in a "
1893+
"future version. Please use `items` instead.",
1894+
FutureWarning, stacklevel=2)
1895+
return self.items()
1896+
18841897
def __len__(self):
18851898
"""Returns length of info axis"""
18861899
return len(self._info_axis)
@@ -5736,7 +5749,7 @@ def astype(self, dtype, copy=True, errors='raise', **kwargs):
57365749
raise KeyError('Only a column name can be used for the '
57375750
'key in a dtype mappings argument.')
57385751
results = []
5739-
for col_name, col in self.iteritems():
5752+
for col_name, col in self.items():
57405753
if col_name in dtype:
57415754
results.append(col.astype(dtype=dtype[col_name], copy=copy,
57425755
errors=errors, **kwargs))
@@ -6140,7 +6153,7 @@ def fillna(self, value=None, method=None, axis=None, inplace=False,
61406153
elif self.ndim == 3:
61416154
# fill in 2d chunks
61426155
result = {col: s.fillna(method=method, value=value)
6143-
for col, s in self.iteritems()}
6156+
for col, s in self.items()}
61446157
prelim_obj = self._constructor.from_dict(result)
61456158
new_obj = prelim_obj.__finalize__(self)
61466159
new_data = new_obj._data
@@ -9947,7 +9960,7 @@ def describe_1d(data):
99479960
else:
99489961
data = self.select_dtypes(include=include, exclude=exclude)
99499962

9950-
ldesc = [describe_1d(s) for _, s in data.iteritems()]
9963+
ldesc = [describe_1d(s) for _, s in data.items()]
99519964
# set a convenient order for rows
99529965
names = []
99539966
ldesc_indexes = sorted((x.index for x in ldesc), key=len)

pandas/core/indexes/multi.py

+1-1
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 = zip(*df.iteritems())
514+
column_names, columns = zip(*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

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ def to_excel(self, path, na_rep='', engine=None, **kwargs):
451451
writer = path
452452
kwargs['na_rep'] = na_rep
453453

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

pandas/core/reshape/pivot.py

+1-1
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)()

pandas/core/reshape/reshape.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ def _unstack_extension_series(series, level, fill_value):
447447
out = []
448448
values = extract_array(series, extract_numpy=False)
449449

450-
for col, indices in result.iteritems():
450+
for col, indices in result.items():
451451
out.append(Series(values.take(indices.values,
452452
allow_fill=True,
453453
fill_value=fill_value),
@@ -506,7 +506,7 @@ def factorize(index):
506506
if is_extension_array_dtype(dtype):
507507
arr = dtype.construct_array_type()
508508
new_values = arr._concat_same_type([
509-
col._values for _, col in frame.iteritems()
509+
col._values for _, col in frame.items()
510510
])
511511
new_values = _reorder_for_extension_array_stack(new_values, N, K)
512512
else:
@@ -647,7 +647,7 @@ def _convert_level_number(level_num, columns):
647647
subset = this[this.columns[loc]]
648648

649649
value_slice = dtype.construct_array_type()._concat_same_type(
650-
[x._values for _, x in subset.iteritems()]
650+
[x._values for _, x in subset.items()]
651651
)
652652
N, K = this.shape
653653
idx = np.arange(N * K).reshape(K, N).T.ravel()
@@ -850,7 +850,7 @@ def check_len(item, name):
850850
# columns to prepend to result.
851851
with_dummies = [data.select_dtypes(exclude=dtypes_to_encode)]
852852

853-
for (col, pre, sep) in zip(data_to_encode.iteritems(), prefix,
853+
for (col, pre, sep) in zip(data_to_encode.items(), prefix,
854854
prefix_sep):
855855
# col is (column_name, column), use just column data here
856856
dummy = _get_dummies_1d(col[1], prefix=pre, prefix_sep=sep,

pandas/core/series.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -1459,13 +1459,12 @@ def to_string(self, buf=None, na_rep='NaN', float_format=None, header=True,
14591459

14601460
# ----------------------------------------------------------------------
14611461

1462-
def iteritems(self):
1462+
def items(self):
14631463
"""
14641464
Lazily iterate over (index, value) tuples.
14651465
14661466
This method returns an iterable tuple (index, value). This is
1467-
convienient if you want to create a lazy iterator. Note that the
1468-
methods Series.items and Series.iteritems are the same methods.
1467+
convienient if you want to create a lazy iterator.
14691468
14701469
Returns
14711470
-------
@@ -1475,20 +1474,25 @@ def iteritems(self):
14751474
14761475
See Also
14771476
--------
1478-
DataFrame.iteritems : Equivalent to Series.iteritems for DataFrame.
1477+
DataFrame.items : Equivalent to Series.items for DataFrame.
14791478
14801479
Examples
14811480
--------
14821481
>>> s = pd.Series(['A', 'B', 'C'])
1483-
>>> for index, value in s.iteritems():
1482+
>>> for index, value in s.items():
14841483
... print("Index : {}, Value : {}".format(index, value))
14851484
Index : 0, Value : A
14861485
Index : 1, Value : B
14871486
Index : 2, Value : C
14881487
"""
14891488
return zip(iter(self.index), iter(self))
14901489

1491-
items = iteritems
1490+
@Appender(generic._shared_docs["iteritems"] % _shared_doc_kwargs)
1491+
def iteritems(self):
1492+
warnings.warn("'iteritems' is deprecated and will be removed in a "
1493+
"future version. Please use `items` instead.",
1494+
FutureWarning, stacklevel=2)
1495+
return self.items()
14921496

14931497
# ----------------------------------------------------------------------
14941498
# Misc public methods

pandas/core/sparse/frame.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ def _reindex_index(self, index, method, copy, level, fill_value=np.nan,
631631
need_mask = mask.any()
632632

633633
new_series = {}
634-
for col, series in self.iteritems():
634+
for col, series in self.items():
635635
if mask.all():
636636
continue
637637

pandas/core/strings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ def str_extractall(arr, pat, flags=0):
940940
index_list = []
941941
is_mi = arr.index.nlevels > 1
942942

943-
for subject_key, subject in arr.iteritems():
943+
for subject_key, subject in arr.items():
944944
if isinstance(subject, str):
945945

946946
if not is_mi:

pandas/core/util/hashing.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def hash_pandas_object(obj, index=True, encoding='utf8', hash_key=None,
9999
h = Series(h, index=obj.index, dtype='uint64', copy=False)
100100

101101
elif isinstance(obj, ABCDataFrame):
102-
hashes = (hash_array(series.values) for _, series in obj.iteritems())
102+
hashes = (hash_array(series.values) for _, series in obj.items())
103103
num_items = len(obj.columns)
104104
if index:
105105
index_hash_generator = (hash_pandas_object(obj.index,

pandas/io/formats/style.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ def _update_ctx(self, attrs):
482482
matter.
483483
"""
484484
for row_label, v in attrs.iterrows():
485-
for col_label, col in v.iteritems():
485+
for col_label, col in v.items():
486486
i = self.index.get_indexer([row_label])[0]
487487
j = self.columns.get_indexer([col_label])[0]
488488
for pair in col.rstrip(";").split(";"):

pandas/io/json/json.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ def _process_converter(self, f, filt=None):
911911

912912
needs_new_obj = False
913913
new_obj = dict()
914-
for i, (col, c) in enumerate(self.obj.iteritems()):
914+
for i, (col, c) in enumerate(self.obj.items()):
915915
if filt(col, c):
916916
new_data, result = f(col, c)
917917
if result:

pandas/io/json/table_schema.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ def build_table_schema(data, index=True, primary_key=None, version=True):
240240
fields.append(convert_pandas_type_to_json_field(data.index))
241241

242242
if data.ndim > 1:
243-
for column, s in data.iteritems():
243+
for column, s in data.items():
244244
fields.append(convert_pandas_type_to_json_field(s))
245245
else:
246246
fields.append(convert_pandas_type_to_json_field(data))

pandas/io/msgpack/_packer.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ cdef class Packer:
194194
raise ValueError("dict is too large")
195195
ret = msgpack_pack_map(&self.pk, L)
196196
if ret == 0:
197-
for k, v in d.iteritems():
197+
for k, v in d.items():
198198
ret = self._pack(k, nest_limit - 1)
199199
if ret != 0: break
200200
ret = self._pack(v, nest_limit - 1)

0 commit comments

Comments
 (0)