首页 > 解决方案 > 查找支持列表和集合以及 int 和 str 的混合数据类型的空单元格

问题描述

考虑以下数据框。

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 都无法处理列表/集合与 ints/str 的混合。

请注意,这是一个非常简化的示例,我需要使用 if 语句测试每个单元格,检测 nans。

标签: pandaslistnan

解决方案


编辑:
如果你真的需要检查每个单元格NaN,你可以这样my_df.isna()

for row_index, row_data in my_df.isna().iterrows():
   for cell in row_data:
      if cell:
          print("found one")

试试这个看看你的 for 循环的输出。我取出 if 行来显示cellfrom for 循环的所有值:

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是数组,因此它返回一个布尔值数组。比较一个布尔值数组的真实性是不明确的,所以熊猫只会抛出错误。

如果您想在 中检查“NaN” df,请致电isnaisnull直接在df

my_df.isna()   

或者你需要pd.isnull整体打电话df

pd.isnull(my_df)

Out[3181]:
       A      B      C
0  False   True  False
1  False  False   True

推荐阅读