2014-05-07 93 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