データフレームからNaN
sをドロップするのはdf.dropna
しかし、何らかの理由でそれは私のものに取り組んでいないと私は理由がわからない。
元のデータフレームは次のとおりです。
fish_frame1: 0 1 2 3 4 5 6 7
0 #0915-8 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN LIVE WGT NaN AMOUNT NaN TOTAL
2 GBW COD NaN NaN 2,280 NaN $0.60 NaN $1,368.00
3 POLLOCK NaN NaN 1,611 NaN $0.01 NaN $16.11
4 WHAKE NaN NaN 441 NaN $0.70 NaN $308.70
5 GBE HADDOCK NaN NaN 2,788 NaN $0.01 NaN $27.88
6 GBW HADDOCK NaN NaN 16,667 NaN $0.01 NaN $166.67
7 REDFISH NaN NaN 932 NaN $0.01 NaN $9.32
8 GB WINTER FLOUNDER NaN NaN 145 NaN $0.25 NaN $36.25
9 GOM WINTER FLOUNDER NaN NaN 25,070 NaN $0.35 NaN $8,774.50
10 GB YELLOWTAIL NaN NaN 26 NaN $1.75 NaN $45.50
以下のコードは、すべてのNaN
sと、3つ以上のNaN
s(いずれか、または両方が動作すると思います)を持つすべての列を削除する試みです。
fish_frame.dropna()
fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
これにより、以下が生成されます。
fish_frame1 after dropna: 0 1 2 3 4 5 6 7
0 #0915-8 NaN NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN LIVE WGT NaN AMOUNT NaN TOTAL
2 GBW COD NaN NaN 2,280 NaN $0.60 NaN $1,368.00
3 POLLOCK NaN NaN 1,611 NaN $0.01 NaN $16.11
4 WHAKE NaN NaN 441 NaN $0.70 NaN $308.70
5 GBE HADDOCK NaN NaN 2,788 NaN $0.01 NaN $27.88
6 GBW HADDOCK NaN NaN 16,667 NaN $0.01 NaN $166.67
7 REDFISH NaN NaN 932 NaN $0.01 NaN $9.32
8 GB WINTER FLOUNDER NaN NaN 145 NaN $0.25 NaN $36.25
9 GOM WINTER FLOUNDER NaN NaN 25,070 NaN $0.35 NaN $8,774.50
10 GB YELLOWTAIL NaN NaN 26 NaN $1.75 NaN $45.50
私はPandas
の初心者なので、何か間違ったことをしているのか、何かを誤解しているのか、コマンドを誤用しているので、これが機能しないのかわかりません。どんな助けでも感謝します。
dropna
docstringから:
# drop the columns where all elements are NaN:
>>> df.dropna(axis=1, how='all')
A B D
0 NaN 2.0 0
1 3.0 4.0 1
2 NaN NaN 5
dropna()
はnull値を削除し、dataFrameを返します。元のdataFrameに割り当てます。
fish_frame = fish_frame.dropna(axis = 1, how = 'all')
コードの参照:
fish_frame.dropna(thresh=len(fish_frame) - 3, axis=1)
これは、7個以上のNaNの列をドロップします(len(df)= 10と仮定)。前述のように3個以上のNanの列をドロップしたい場合、threshは3に等しくなければなりません。
dropna()
はデフォルトでデータフレームを返します(デフォルトはinplace=False
動作)、したがって、コードにとどまるためには、新しいデータフレームに割り当てる必要があります。
たとえば、
fish_frame = fish_frame.dropna()
dropna
が空のデータフレームを返す理由については、dropnaメソッドの "how"引数を確認することをお勧めします( https://pandas.pydata.org/pandas-docs /stable/generated/pandas.DataFrame.dropna.html )。また、axis = 0は列に対応し、axis = 1は行に対応することに留意してください。
したがって、すべての「NA」、axis = 0、how = "any"の列を削除するには、次のトリックを実行する必要があります。
fish_frame = fish_frame.dropna(axis=0, how="any")
最後に、「thresh」引数は、ドロップが発生するために必要なNAの数を明示的に指定します。そう
fish_frame = fish_frame.dropna(axis=0, thresh=3, how="any")
3つのNAを持つ列を削除するには、うまく機能する必要があります。
また、Corleyが指摘したように、how = "any"はデフォルトであるため、必要ありません。