Skip to content

Commit 2c51144

Browse files
committed
BUG: don't accidentally upcast values in DataFrame.itertuples, close #1505
1 parent a6f5534 commit 2c51144

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

pandas/core/frame.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -615,12 +615,16 @@ def iterrows(self):
615615
s.name = k
616616
yield k, s
617617

618-
def itertuples(self):
618+
def itertuples(self, index=True):
619619
"""
620620
Iterate over rows of DataFrame as tuples, with index value
621621
as first element of the tuple
622622
"""
623-
return izip(self.index, *self.values.T)
623+
arrays = []
624+
if index:
625+
arrays.append(self.index)
626+
arrays.extend(self[k] for k in self.columns)
627+
return izip(*arrays)
624628

625629
iterkv = iteritems
626630
if py3compat.PY3: # pragma: no cover

pandas/tests/test_frame.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2544,6 +2544,12 @@ def test_itertuples(self):
25442544
expected = self.frame.ix[i,:].reset_index(drop=True)
25452545
assert_series_equal(s, expected)
25462546

2547+
df = DataFrame({'floats': np.random.randn(5),
2548+
'ints': range(5)}, columns=['floats', 'ints'])
2549+
2550+
for tup in df.itertuples(index=False):
2551+
self.assert_(isinstance(tup[1], np.integer))
2552+
25472553
def test_len(self):
25482554
self.assertEqual(len(self.frame), len(self.frame.index))
25492555

0 commit comments

Comments
 (0)