Skip to content

Commit 3b02e73

Browse files
tacaswelljreback
authored andcommitted
FIX: define DataFrame.items for all versions of python (#17214)
1 parent ab32c0a commit 3b02e73

File tree

5 files changed

+26
-5
lines changed

5 files changed

+26
-5
lines changed

Diff for: doc/source/whatsnew/v0.21.0.txt

+4
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ Other Enhancements
128128
- :func:`DataFrame.add_prefix` and :func:`DataFrame.add_suffix` now accept strings containing the '%' character. (:issue:`17151`)
129129
- `read_*` methods can now infer compression from non-string paths, such as ``pathlib.Path`` objects (:issue:`17206`).
130130
- :func:`pd.read_sas()` now recognizes much more of the most frequently used date (datetime) formats in SAS7BDAT files (:issue:`15871`).
131+
- :func:`DataFrame.items` and :func:`Series.items` is now present in both Python 2 and 3 and is lazy in all cases (:issue:`13918`, :issue:`17213`)
132+
133+
134+
131135

132136
.. _whatsnew_0210.api_breaking:
133137

Diff for: pandas/core/frame.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -802,8 +802,7 @@ def itertuples(self, index=True, name="Pandas"):
802802
# fallback to regular tuples
803803
return zip(*arrays)
804804

805-
if compat.PY3: # pragma: no cover
806-
items = iteritems
805+
items = iteritems
807806

808807
def __len__(self):
809808
"""Returns length of info axis, but here we use the index """

Diff for: pandas/core/series.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1110,8 +1110,7 @@ def iteritems(self):
11101110
"""
11111111
return zip(iter(self.index), iter(self))
11121112

1113-
if compat.PY3: # pragma: no cover
1114-
items = iteritems
1113+
items = iteritems
11151114

11161115
# ----------------------------------------------------------------------
11171116
# Misc public methods

Diff for: pandas/tests/frame/test_api.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,16 @@ def test_nonzero(self):
171171
def test_iteritems(self):
172172
df = self.klass([[1, 2, 3], [4, 5, 6]], columns=['a', 'a', 'b'])
173173
for k, v in compat.iteritems(df):
174-
assert type(v) == self.klass._constructor_sliced
174+
assert isinstance(v, self.klass._constructor_sliced)
175+
176+
def test_items(self):
177+
# issue #17213, #13918
178+
cols = ['a', 'b', 'c']
179+
df = DataFrame([[1, 2, 3], [4, 5, 6]], columns=cols)
180+
for c, (k, v) in zip(cols, df.items()):
181+
assert c == k
182+
assert isinstance(v, Series)
183+
assert (df[k] == v).all()
175184

176185
def test_iter(self):
177186
assert tm.equalContents(list(self.frame), self.frame.columns)

Diff for: pandas/tests/series/test_api.py

+10
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,16 @@ def test_iteritems(self):
301301
# assert is lazy (genrators don't define reverse, lists do)
302302
assert not hasattr(self.series.iteritems(), 'reverse')
303303

304+
def test_items(self):
305+
for idx, val in self.series.items():
306+
assert val == self.series[idx]
307+
308+
for idx, val in self.ts.items():
309+
assert val == self.ts[idx]
310+
311+
# assert is lazy (genrators don't define reverse, lists do)
312+
assert not hasattr(self.series.items(), 'reverse')
313+
304314
def test_raise_on_info(self):
305315
s = Series(np.random.randn(10))
306316
with pytest.raises(AttributeError):

0 commit comments

Comments
 (0)