请考虑以下数据框。
import pandas as pd
my_df = pd.DataFrame(columns =['A','B','C'])
my_df.at[0,'A'] = 1234
my_df.at[0,'C'] = ['5','6','7']
my_df.at[1,'A'] = set([8,9,10])
my_df.at[1,'B'] = 'my_hat'
然后我要查找所有属于nan的单元格。
for row_index, row_data in my_df.iterrows():
for cell in row_data:
if pd.isnull(cell):
print("found one")
pd.isnull,pd.isna和pd.notnull都无法处理带有int / str的列表/集合的混合。
请注意,这是一个简化的示例,我需要使用if语句测试每个单元格,以检测nans。
答案 0 :(得分:1)
尝试此操作以查看for循环的输出。我从if循环中取出了if行以显示cell
的所有值:
for row_index, row_data in my_df.iterrows():
for cell in row_data:
print(cell)
Output:
1234
nan
['5', '6', '7']
{8, 9, 10}
my_hat
nan
现在尝试:
pd.isnull(['5', '6', '7'])
Out[3183]: array([False, False, False])
pd.isnull
接受scalar or array-like
并返回bool or array-like of bool
。您的cell
之一是数组,因此它返回布尔值数组。比较布尔值数组的真实性是模棱两可的,因此熊猫只会抛出错误。
如果要在df
中检查“ NaN”,请直接在isna
上致电isnull
或df
my_df.isna()
或者您需要在整个pd.isnull
上致电df
pd.isnull(my_df)
Out[3181]:
A B C
0 False True False
1 False False True