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