从pandas数据框中删除重复列:转置和drop_duplicates的行为
我在玩一个叫 drop_duplicates()
的功能。假设我有一个数据表,里面有重复的列:
In [9]:
df1 = pd.DataFrame( data=nr.random((3,2)) )
df1
Out[9]:
0 1
0 0.441663 0.396479
1 0.079502 0.715348
2 0.692295 0.069418
3 rows × 2 columns
In [10]:
df2 = pd.concat( ( df1, df1 ), axis=1 )
df2
Out[10]:
0 1 0 1
0 0.441663 0.396479 0.441663 0.396479
1 0.079502 0.715348 0.079502 0.715348
2 0.692295 0.069418 0.692295 0.069418
3 rows × 4 columns
In [11]:
我想把重复的列去掉。下面这个方法可以做到:
df2.T.drop_duplicates().T
Out[12]:
0 1
0 0.441663 0.396479
1 0.079502 0.715348
2 0.692295 0.069418
3 rows × 2 columns
但是,这个方法就不行:
df2.T.drop_duplicates( inplace=True )
df2
Out[11]:
0 1 0 1
0 0.441663 0.396479 0.441663 0.396479
1 0.079502 0.715348 0.079502 0.715348
2 0.692295 0.069418 0.692295 0.069418
3 rows × 4 columns
In [12]:
为什么这个方法不行呢?
1 个回答
2
第二种方式确实有效(df.T.drop_duplicates(inplace=True)
),但它是在一个副本上操作(转置本身并不会复制,但drop_duplicates
会复制);所以它是在修改一个你没有引用的副本。
几乎所有的pandas操作都会返回一个新对象;这才是正确的用法,inplace
是一个方便的功能,但必须小心使用(在我看来,真的很少用)。