Pandas= Dataframeを検索して、エントリの欠落またはNaNエントリがある場所を見つけようとしています。
私が使用しているデータフレームは次のとおりです。
cl_id a c d e A1 A2 A3
0 1 -0.419279 0.843832 -0.530827 text76 1.537177 -0.271042
1 2 0.581566 2.257544 0.440485 dafN_6 0.144228 2.362259
2 3 -1.259333 1.074986 1.834653 system 1.100353
3 4 -1.279785 0.272977 0.197011 Fifty -0.031721 1.434273
4 5 0.578348 0.595515 0.553483 channel 0.640708 0.649132
5 6 -1.549588 -0.198588 0.373476 audio -0.508501
6 7 0.172863 1.874987 1.405923 Twenty NaN NaN
7 8 -0.149630 -0.502117 0.315323 file_max NaN NaN
注:空白のエントリは空の文字列です-これは、データフレームが由来するファイルに英数字のコンテンツがなかったためです。
このデータフレームがある場合、NaNまたは空白のエントリが発生するインデックスのリストを見つけるにはどうすればよいですか?
np.where(pd.isnull(df))
は、値がNaNである行と列のインデックスを返します。
In [152]: import numpy as np
In [153]: import pandas as pd
In [154]: np.where(pd.isnull(df))
Out[154]: (array([2, 5, 6, 6, 7, 7]), array([7, 7, 6, 7, 6, 7]))
In [155]: df.iloc[2,7]
Out[155]: nan
In [160]: [df.iloc[i,j] for i,j in Zip(*np.where(pd.isnull(df)))]
Out[160]: [nan, nan, nan, nan, nan, nan]
空の文字列である値を見つけるには、applymapを使用します。
In [182]: np.where(df.applymap(lambda x: x == ''))
Out[182]: (array([5]), array([7]))
applymap
を使用するには、DataFrameの各セルに対してPython関数を1回呼び出す必要があります。大きなDataFrameの場合は遅くなる可能性があります。代わりにNaNを含むすべての空白セルには、pd.isnull
。
これを試して:
df[df['column_name'] == ''].index
naNの場合は、次を試すことができます。
pd.isna(df['column_name'])
部分的な解決策:単一の文字列列の場合、tmp = df['A1'].fillna(''); isEmpty = tmp==''
は、空の文字列またはNaN値があるブール値のTrueのSeriesを提供します。
私はに頼った
df[ (df[column_name].notnull()) & (df[column_name]!=u'') ].index
最近。これにより、nullと空文字列の両方のセルが一度に取得されます。
特定の列に空のセルを含むすべての行を取得します。
DF_new_row=DF_raw.loc[DF_raw['columnname']=='']
これにより、チェック条件を満たすDF_rawのサブセットが提供されます。