查找支持列表和集合以及int和str

时间:2019-06-01 00:57:26

标签: pandas list nan

请考虑以下数据框。

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。

1 个答案:

答案 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上致电isnulldf

my_df.isna()   

或者您需要在整个pd.isnull上致电df

pd.isnull(my_df)

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