如何检查pandas DataFrame中的特定单元格是否为空?

时间:2017-03-21 08:32:10

标签: python pandas dataframe

我在熊猫中有以下df

0       A     B     C
1       2   NaN     8

如何检查df.iloc[1]['B']是否为NaN?

我尝试使用df.isnan(),我得到一张这样的表:

0       A     B      C
1   false  true  false

但是我不确定如何索引表格,以及这是否是执行作业的有效方式?

3 个答案:

答案 0 :(得分:9)

使用pd.isnull,选择使用lociloc

print (df)
   0  A   B  C
0  1  2 NaN  8

print (df.loc[0, 'B'])
nan

a = pd.isnull(df.loc[0, 'B'])
print (a)
True

print (df['B'].iloc[0])
nan

a = pd.isnull(df['B'].iloc[0])
print (a)
True

答案 1 :(得分:1)

jezrael的反应很明显。如果您只关心NaN值,我正在探索是否有更快的选择,因为根据我的经验,求平面阵列(奇怪地)比计数更快。这段代码似乎更快:

df.isnull().values.any()

例如:

In [2]: df = pd.DataFrame(np.random.randn(1000,1000))

In [3]: df[df > 0.9] = pd.np.nan

In [4]: %timeit df.isnull().any().any()
100 loops, best of 3: 14.7 ms per loop

In [5]: %timeit df.isnull().values.sum()
100 loops, best of 3: 2.15 ms per loop

In [6]: %timeit df.isnull().sum().sum()
100 loops, best of 3: 18 ms per loop

In [7]: %timeit df.isnull().values.any()
1000 loops, best of 3: 948 µs per loop

答案 2 :(得分:0)

如果要在特定列中查找NaN的索引,可以使用

list(df['B'].index[df['B'].apply(np.isnan)])

如果要获取数据框中所有可能的NaN值的索引,可以执行以下操作

row_col_indexes = list(map(list, np.where(np.isnan(np.array(df)))))
indexes = []
for i in zip(row_col_indexes[0], row_col_indexes[1]):
    indexes.append(list(i))

如果您要寻找一种衬板,可以使用:

list(zip(*[x for x in list(map(list, np.where(np.isnan(np.array(df)))))]))