在Pandas Dataframe中查找空或NaN条目

时间:2014-11-26 21:28:37

标签: list python-2.7 pandas indexing dataframe

我正在尝试搜索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或空白条目的索引的列表?

10 个答案:

答案 0 :(得分:21)

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函数。对于大型DataFrame而言,这可能会很慢,因此如果您可以安排所有空白单元格包含NaN,那么您可以使用pd.isnull

答案 1 :(得分:6)

尝试一下:

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

对于NaN,您可以尝试:

pd.isna(df['column_name'])

答案 2 :(得分:4)

部分解决方案:对于单个字符串列 tmp = df['A1'].fillna(''); isEmpty = tmp==''  给出布尔系列True,其中有空字符串或NaN值。

答案 3 :(得分:2)

您也做得很好:

text_empty = df['column name'].str.len() > -1

df.loc[text_empty].index

结果将是空白行及其索引号。

答案 4 :(得分:1)

我求助于

map

最近。一口气得到空字符串和空字符串。

答案 5 :(得分:1)

您可以使用带有正则表达式的字符串方法来查找带有空字符串的单元格:

df[~df.column_name.str.contains('\w')].column_name.count()

答案 6 :(得分:1)

在我看来,不要浪费时间,只需用 NaN 替换即可!然后,用 Na 搜索所有条目。 (这是正确的,因为空值无论如何都是缺失值)。

import numpy as np                             # to use np.nan 
import pandas as pd                            # to use replace
    
df = df.replace(' ', np.nan)                   # to get rid of empty values
nan_values = df[df.isna().any(axis=1)]         # to get all rows with Na

nan_values                                     # view df with NaN rows only

答案 7 :(得分:0)

要获取特定列中包含空单元格的所有行。

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

这将提供满足检查条件的DF_raw子集。

答案 8 :(得分:0)

使用Nan检查列中是否包含.isnull(),并使用.eq('')检查空字符串,然后使用按位OR运算符|将两者结合在一起。

沿axis 0求和以查找缺少数据的列,然后沿axis 1求和以获取丢失数据的行的索引位置。

missing_cols, missing_rows = (
    (df2.isnull().sum(x) | df2.eq('').sum(x))
    .loc[lambda x: x.gt(0)].index
    for x in (0, 1)
)

>>> df2.loc[missing_rows, missing_cols]
         A2       A3
2            1.10035
5 -0.508501         
6       NaN      NaN
7       NaN      NaN

答案 9 :(得分:0)

另一种选择是使用constructor python函数来解决可能存在多个空格的情况。

updateName()

添加NaN值:

isspace()