我正在遍历一些数据,如果该列不包含任何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
,然后再执行循环,否则以后将无法对价格数据进行任何数学运算。这可能会影响事物吗?
答案 0 :(得分:1)
错误是使用is
。
df[Stock].isna().any() is False:
其结果始终为False,不会合并任何内容。但是,如果您使用:
if not df[col].isna().any():
或
df[Stock].isna().any() == False:
有效。
详细原因in this post。 is
不等于==
。
答案 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')