Skip to content

Commit eff9032

Browse files
committed
BUG: validate ndarray size correctly with assigning pieces to a DataFrame
1 parent 74fee3d commit eff9032

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

pandas/core/indexing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,8 @@ def setter(item, v):
144144
setter(item, np.nan)
145145

146146
# we have an equal len ndarray
147-
elif isinstance(value, np.ndarray) and value.ndim > 1:
148-
if len(labels) != len(value):
147+
elif isinstance(value, np.ndarray) and value.ndim == 2:
148+
if len(labels) != value.shape[1]:
149149
raise ValueError('Must have equal len keys and value when'
150150
' setting with an ndarray')
151151

pandas/tests/test_indexing.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -874,11 +874,21 @@ def test_multi_assign(self):
874874
'col1':Series([0,1,4,6,8,10],dtype='float64'),
875875
'col2':[12,7,16,np.nan,20,22]})
876876

877+
878+
# frame on rhs
877879
df2.ix[mask, cols]= dft.ix[mask, cols]
878880
assert_frame_equal(df2,expected)
879881
df2.ix[mask, cols]= dft.ix[mask, cols]
880882
assert_frame_equal(df2,expected)
881883

884+
# with an ndarray on rhs
885+
df2 = df.copy()
886+
df2.ix[mask, cols]= dft.ix[mask, cols].values
887+
assert_frame_equal(df2,expected)
888+
df2.ix[mask, cols]= dft.ix[mask, cols].values
889+
assert_frame_equal(df2,expected)
890+
891+
882892
if __name__ == '__main__':
883893
import nose
884894
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],

0 commit comments

Comments
 (0)