2016-04-25 7 views
1

値コードです:削除行は、私はここで、列CのNULL値を持つすべての行の自分自身を取り除くために必要な

infile="C:\****" 

df=pd.read_csv(infile)  

A B C D 
1 1 NaN 3 
2 3 7 NaN 
4 5 NaN 8 
5 NaN 4 9 
NaN 1 2 NaN 

私がしようとしている2つの基本的な方法があります。

方法1: 源:How to drop rows of Pandas DataFrame whose value in certain columns is NaN

df.dropna() 

結果は、すべての行にNaN値があるので理にかなって空データフレームです。この方法については

df.dropna(subset=[3]) 

私は、列のインデックス番号と列名の両方を使用してサブセット値をいじってみました。データフレームはまだ空です。

方法2: ソース:Deleting DataFrame row in Pandas based on column value

df = df[df.C.notnull()] 

はまだ空のデータフレームになり!

私は間違っていますか?

+2

'df.dropna(サブセット= [ 'C'])' – MaxU

+0

そして第二にメソッドは空のデータフレームを返しません。あなたの最初の試みがデータフレームを空にしたのかもしれませんか? – ayhan

+1

うまく、方法2も同様に動作するはずです – MaxU

答えて

1
df = pd.DataFrame([[1,1,np.nan,3],[2,3,7,np.nan],[4,5,np.nan,8],[5,np.nan,4,9],[np.nan,1,2,np.nan]], columns = ['A','B','C','D']) 
df = df[df['C'].notnull()] 
df 
+0

可読性のために 'isnull'を反転させるのではなく' notnull'を使用してください – EdChum

+0

@EdChum彼はnotnull()を好きではなかったので、私は彼にいくつかのバリエーションを与えました:) – flyingmeatball

+0

OPは空のデータフレーム不正な操作 – EdChum

0

それだけで(少なくともパンダ0.18.0で)正しくmethod 2作品だということを証明:

In [100]: df 
Out[100]: 
    A B C D 
0 1.0 1.0 NaN 3.0 
1 2.0 3.0 7.0 NaN 
2 4.0 5.0 NaN 8.0 
3 5.0 NaN 4.0 9.0 
4 NaN 1.0 2.0 NaN 

In [101]: df.dropna(subset=['C']) 
Out[101]: 
    A B C D 
1 2.0 3.0 7.0 NaN 
3 5.0 NaN 4.0 9.0 
4 NaN 1.0 2.0 NaN 

In [102]: df[df.C.notnull()] 
Out[102]: 
    A B C D 
1 2.0 3.0 7.0 NaN 
3 5.0 NaN 4.0 9.0 
4 NaN 1.0 2.0 NaN 

In [103]: df = df[df.C.notnull()] 

In [104]: df 
Out[104]: 
    A B C D 
1 2.0 3.0 7.0 NaN 
3 5.0 NaN 4.0 9.0 
4 NaN 1.0 2.0 NaN 
+0

だから、違いは私のデータセットと関係があります。または、NaN値が実際にnullとして認識されない可能性がありますか?それらはpandas.mergeを使用して生成されました。 – geolish

+0

@geolish、 'df.isnull()'を印刷するだけです。NaNを含むセルに 'True'値があるはずです – MaxU

関連する問題