2016-09-06 16 views
5

これは本当に奇妙です。私はpandasデータフレームから欠落したデータを含む行を削除する方法をいくつか試しましたが、どれも動作していないようです。 これはコード(I使用方法のほんのコメントを解除1 - これらは、私は別の修正に使用される3です - これが最新のものである)である:Pandas - 欠落したデータが欠落している行を.isnull()、notnull()、dropna()を使用して機能しない

import pandas as pd 
Test = pd.DataFrame({'A':[1,2,3,4,5],'B':[1,2,'NaN',4,5],'C':[1,2,3,'NaT',5]}) 
print(Test) 
#Test = Test.ix[Test.C.notnull()] 
#Test = Test.dropna() 
Test = Test[~Test[Test.columns.values].isnull()] 
print "And now" 
print(Test) 

しかし、すべてのケースでは、私が得るすべてはこれです:

A B C 
0 1 1 1 
1 2 2 2 
2 3 NaN 3 
3 4 4 NaT 
4 5 5 5 
And now 
    A B C 
0 1 1 1 
1 2 2 2 
2 3 NaN 3 
3 4 4 NaT 
4 5 5 5 

私は間違いありませんか?または何が問題なのですか?理想的には、私はこれを取得したいと思います:

A B C 
0 1 1 1 
1 2 2 2 
4 5 5 5 
+3

を行うとし、 '.dropna()'が正しく動作するように... –

+0

文字列またはnp.nanは何の違いもありませんでした:( – durbachit

答えて

7

あなたの例DFはNaNNaTのように文字列.dropna.notnullとの共同を持っています。 falseyを考慮していますので、あなたが使用することができますあなたの例...あなたに与え

df[~df.isin(['NaN', 'NaT']).any(axis=1)] 

を与えられた:

A B C 
0 1 1 1 
1 2 2 2 
4 5 5 5 

あなたはnp.nannp.datetime64('NaT')の使用のDFのような(ノートを持っていた場合

:次にあなたに与える df.dropna()を実行している

df = pd.DataFrame({'A':[1,2,3,4,5],'B':[1,2,np.nan,4,5],'C':[1,2,3,np.datetime64('NaT'),5]}) 

:文字列の代わりに3210

A B C 
0 1 1.0 1 
1 2 2.0 2 
4 5 5.0 5 

Bは、NaNの値を格納するのに必要な整数ではなく、floatになりました。

+0

Cool、最初の解決策: ) ありがとうございました! – durbachit

4

ORIGデータでこれを試してみてください。代わりにnp.nan` `の` NaT`を

Test.replace(["NaN", 'NaT'], np.nan, inplace = True) 
Test = Test.dropna() 
Test 

するか、データを変更し、あなたが実際に文字列 `NaN`を持っています。この

import pandas as pd 
Test = pd.DataFrame({'A':[1,2,3,4,5],'B':[1,2,np.nan,4,5],'C':[1,2,3,pd.NaT,5]}) 
print(Test) 
Test = Test.dropna() 
print(Test) 



    A B C 
0 1 1.0 1 
1 2 2.0 2 
4 5 5.0 5 
+0

これはうまくいった! (インプレース置換) – durbachit

関連する問題