web-dev-qa-db-ja.com

Pandas Dataframeで空またはNaNエントリを見つけます

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または空白のエントリが発生するインデックスのリストを見つけるにはどうすればよいですか?

25
edesz

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

26
unutbu

これを試して:

df[df['column_name'] == ''].index

naNの場合は、次を試すことができます。

pd.isna(df['column_name'])
9
Vyachez

部分的な解決策:単一の文字列列の場合、tmp = df['A1'].fillna(''); isEmpty = tmp==''は、空の文字列またはNaN値があるブール値のTrueのSeriesを提供します。

4
lahoffm

私はに頼った

df[ (df[column_name].notnull()) & (df[column_name]!=u'') ].index

最近。これにより、nullと空文字列の両方のセルが一度に取得されます。

3
jeremy_rutman

特定の列に空のセルを含むすべての行を取得します。

DF_new_row=DF_raw.loc[DF_raw['columnname']=='']

これにより、チェック条件を満たすDF_rawのサブセットが提供されます。

0
Shara