diff --git a/RELEASE.rst b/RELEASE.rst index c1d40dc76f598..69cfd1eb99d7e 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -78,6 +78,7 @@ pandas 0.11.1 (removed warning) (GH2786_), and fix (GH3230_) - Fix to_csv to handle non-unique columns (GH3495_) - Fixed bug in groupby with empty series referencing a variable before assignment. (GH3510_) + - Fixed bug in mixed-frame assignment with aligned series (GH3492_) .. _GH3164: https://github.com/pydata/pandas/issues/3164 .. _GH2786: https://github.com/pydata/pandas/issues/2786 @@ -103,6 +104,7 @@ pandas 0.11.1 .. _GH3448: https://github.com/pydata/pandas/issues/3448 .. _GH3449: https://github.com/pydata/pandas/issues/3449 .. _GH3495: https://github.com/pydata/pandas/issues/3495 +.. _GH3492: https://github.com/pydata/pandas/issues/3492 .. _GH3493: https://github.com/pydata/pandas/issues/3493 diff --git a/doc/source/v0.11.1.txt b/doc/source/v0.11.1.txt index 5cfb24d71e19b..4be34cdbf84eb 100644 --- a/doc/source/v0.11.1.txt +++ b/doc/source/v0.11.1.txt @@ -21,3 +21,4 @@ on GitHub for a complete list. .. _GH2437: https://github.com/pydata/pandas/issues/2437 .. _GH3477: https://github.com/pydata/pandas/issues/3477 +.. _GH3492: https://github.com/pydata/pandas/issues/3492 diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 7562d20363027..8b6acd8c7c53e 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -124,8 +124,7 @@ def setter(item, v): values = data.values if np.prod(values.shape): result, changed = com._maybe_upcast_indexer(values,plane_indexer,v,dtype=getattr(data,'dtype',None)) - if changed: - self.obj[item] = result + self.obj[item] = result labels = item_labels[het_idx] diff --git a/pandas/tests/test_indexing.py b/pandas/tests/test_indexing.py index ae71ec8b35422..f70c781847cc7 100644 --- a/pandas/tests/test_indexing.py +++ b/pandas/tests/test_indexing.py @@ -784,6 +784,21 @@ def test_dups_fancy_indexing(self): assert_frame_equal(df,result) + def test_indexing_mixed_frame_bug(self): + + # GH3492 + df=DataFrame({'a':{1:'aaa',2:'bbb',3:'ccc'},'b':{1:111,2:222,3:333}}) + + # this works, new column is created correctly + df['test']=df['a'].apply(lambda x: '_' if x=='aaa' else x) + + # this does not work, ie column test is not changed + idx=df['test']=='_' + temp=df.ix[idx,'a'].apply(lambda x: '-----' if x=='aaa' else x) + df.ix[idx,'test']=temp + self.assert_(df.iloc[0,2] == '-----') + + #if I look at df, then element [0,2] equals '_'. If instead I type df.ix[idx,'test'], I get '-----', finally by typing df.iloc[0,2] I get '_'. if __name__ == '__main__': import nose