2016-06-28 1 views
0

NaN要素を削除してすべての行を削除する必要はありません。pandas drop nanの使い方、すべての行を削除しない

私のようなPythonのデータフレームのリストをHAVA:

[[2.0, 3.0, 5.0, nan], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, nan, nan]] 

は、どのように私は次のようにそれを変更するためにパンダを使用することができます。ちょうど方法が良いそれを行うことができますNaN要素

[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]] 

を削除しますか?

+0

'[2.0、3.0、5.0、ナン]、[1.0、3.0、5.0、6.0]を、除外

df.replace('NaN', 0) 

を[2.0、5.0、nan、nan]] 'は1列か' DataFrame'ですか? – jezrael

+0

あなたはどの方法も表示していません。 –

+0

@ChristophTerasa私はちょうどこれを行う方法が知りたいです。 –

答えて

-2

あなたが表示されている「ナン」せずにデータフレーム(DF)を印刷したい場合は、あなただけの数が同じになる

df2=df.fillna("") 

たデータフレーム、(DF2)によって、ブランクでそれを置き換えることができます行と列はオリジナルではなくブランクになります。

+0

[[2.0,3.0,5.0、 '']、[1.0,3.0,5.0,6.0]、[2.0、5.0、 ''、 '']]になります。それはokではありません –

1

私はそれはそれはChristoph Terasaを説明する非常に素晴らしい、DataFrameからNaNを削除する問題だと思う:

pandas.DataFramesは、(N×Mの)長方形である必要があるので、欠損値は、作成時にはNaNで満たされます。

可能な解決方法の1つは、list comprehensionです。

df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan], 
        [1.0, 3.0, 5.0, 6.0], 
        [2.0, 5.0, np.nan, np.nan]]) 

print (df) 
    0 1  2  3 
0 2 3  5 NaN 
1 1 3  5  6 
2 2 5 NaN NaN 

valuesによってlistに変換し、isnullと条件によってNaNを削除します。

は、このソリューションのためにあなた Christoph Terasaありがとう:

a = [[j for j in i if not pd.isnull(j)] for i in df.values] 
print (a) 
[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]] 

私の古いソリューション:

df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan], 
        [1.0, 3.0, 5.0, 6.0], 
        [2.0, 5.0, np.nan, np.nan]]) 

df = df.where((pd.notnull(df)), None) 
print (df) 
    0 1  2  3 
0 2 3  5 None 
1 1 3  5  6 
2 2 5 None None 

listLに変換してからNoneを削除します。

あなたが最初NaNNoneに置き換えることができます。

L = [[2.0, 3.0, 5.0, None], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, None, None]] 

a = [[i for i in x if i != None] for x in L] 

print (a) 
[[2.0, 3.0, 5.0], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0]] 
+1

'' None''で 'DataFrame'を最初に埋めることは少し不必要だと思います。あなたは 'DataFrame'で直接リスト内包を行うことができます:' a = [[d.value]]のiの場合は[iの場合はjを、pd.isnull(j)ならばjです。 –

+0

ありがとう、私はそれを答えに加える。 – jezrael

+0

良い、あなたも私の間違いを修正しました。 :D –

1

@jezraelが正しいです。 pandasでは、データフレームを長方形にする必要があります。ただし、四角形の形状を変更することはできます。

df = pd.DataFrame([[2.0, 3.0, 5.0, np.nan], [1.0, 3.0, 5.0, 6.0], [2.0, 5.0, np.nan, np.nan]]) 

df 

    0 1 2 3 
0 2.0 3.0 5.0 NaN 
1 1.0 3.0 5.0 6.0 
2 2.0 5.0 NaN NaN 

df.stack() 

0 0 2.0 
    1 3.0 
    2 5.0 
1 0 1.0 
    1 3.0 
    2 5.0 
    3 6.0 
2 0 2.0 
    1 5.0 
dtype: float64 
0

この試してください。その後、単に0

df = df[df[] > 0] 
関連する問題