在pandas中去重时保留NaN
在使用 drop_duplicates()
这个方法的时候,我可以去掉重复的项,但同时也会把所有的 NaNs
合并成一条记录。我该怎么做才能去掉重复项,同时保留那些有空值的行(比如 np.nan
、None
或者 ''
)呢?
import pandas as pd
df = pd.DataFrame({'col':['one','two',np.nan,np.nan,np.nan,'two','two']})
Out[]:
col
0 one
1 two
2 NaN
3 NaN
4 NaN
5 two
6 two
df.drop_duplicates(['col'])
Out[]:
col
0 one
1 two
2 NaN
3 个回答
0
使用:
df.drop_duplicates('col').append(df[df['col'].isna()])
2
好吧,有一种不太优雅的解决办法,就是先把NaN
(表示“不是一个数字”的意思)保存起来,然后再把它们放回去:
temp = df.iloc[pd.isnull(df).any(1).nonzero()[0]]
asd = df.drop_duplicates('col')
pd.merge(temp, asd, how='outer')
Out[81]:
col
0 one
1 two
2 NaN
3 NaN
4 NaN
39
尝试一下
df[(~df.duplicated()) | (df['col'].isnull())]
结果是:
col
0 one
1 two
2 NaN
3 NaN
4 NaN