熊猫.isna()循环时未被拾取

时间:2019-06-16 17:10:51

标签: python pandas

我正在遍历一些数据,如果该列不包含任何NaN,我想将其与我的主df合并。但是出于某种原因,.isna().any()只能在我单独查看该列时才在循环中无法使用。

我的代码当前为:

if df[Stock].isna().any() is False:
    total_df = total_df.merge(df[['Date', Stock]], on='Date', how='left')
else:
    pass

就我而言,这应该过滤掉任何包含NaN的列。但是,事实并非如此,它基本上什么也没有做,因为完成我的df既包含NaN列,也包含我实际想要的列。我也尝试过==True,但无济于事。当我使用print(df[Stock].isna().any())检查知道有事实的列时,程序正确地返回True。所以我的问题是,为什么这样不能循环工作?

我已经盯着看了好几个小时了,可能我正在做一件令人难以置信的愚蠢的事,所以可能需要一双新鲜的眼睛,但我真的很沮丧。干杯

编辑:

所以,对于价值而言,当我用NaN来计算每列的总和时,它将返回一个实际数字。因此,当我手动检查nan时,大熊猫似乎并没有意识到df的含义。但是,我必须对pd.to_numeric数据进行df,然后再执行循环,否则以后将无法对价格数据进行任何数学运算。这可能会影响事物吗?

2 个答案:

答案 0 :(得分:1)

错误是使用is

df[Stock].isna().any() is False:

其结果始终为False,不会合并任何内容。但是,如果您使用:

if not df[col].isna().any():

df[Stock].isna().any() == False:

有效。

详细原因in this postis不等于==

答案 1 :(得分:0)

没有您的代码,我无法对其进行测试,但是请尝试将这段代码放入for循环中。不确定['Date','column']应该使用引号还是不使用引号,但请同时尝试。

for column in df:
    if df[column].isna().any() is False:
        total_df = total_df.merge(df[['Date', 'column']], on='Date', how='left')