2014-05-07 67 views
3

使用drop_duplicates()方法时,我减少了重复项,但也将所有NaNs合并为一个项。如何删除重复项,同时保留具有空项的行(如np.nan, None or '')?删除重复项,同时保留熊猫中的NaN

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 

回答

1

嗯,一个解决方法是不是真的很美,是先救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 
+0

请注意,这只是保存了'NaN'而不是其他版本的“失踪”。你保存的是什么取决于你的数据集。通常,在同一时间有几个不同的“缺失数据”指标是没有意义的。 – FooBar

6

尝试

df[(~df.duplicated()) | (df['col'].isnull())] 

结果是:

col 
0 one 
1 two 
2 NaN 
3 NaN  
4 NaN