Python 在熊猫数据帧中检查NAN时的奇怪行为
我想循环df中的所有行,检查两个条件是否成立,如果成立,则用其他值替换列中的值。我尝试了两种不同的方法:Python 在熊猫数据帧中检查NAN时的奇怪行为,python,pandas,Python,Pandas,我想循环df中的所有行,检查两个条件是否成立,如果成立,则用其他值替换列中的值。我尝试了两种不同的方法: if (sales.iloc[idx]['shelf'] in ("DRY BLENDS","LIQUID BLENDS")) & np.isnan(sales.iloc[idx]['traceable_blend']): sales.iloc[idx]['traceable_blend'] = False 以及: 通过包含print语句,我们已经验证了if
if (sales.iloc[idx]['shelf'] in ("DRY BLENDS","LIQUID BLENDS")) & np.isnan(sales.iloc[idx]['traceable_blend']):
sales.iloc[idx]['traceable_blend'] = False
以及:
通过包含print语句,我们已经验证了if语句实际上是功能性的,但从未发生赋值。一旦我们运行了循环,“traceable_blend”列中就有True和NaN值,但决不会有False。不知怎的,任务失败了
看起来这可能有用:
if (sales.iloc[idx]['shelf'] in ("DRY BLENDS","LIQUID BLENDS")) & np.isnan(sales.iloc[idx]['traceable_blend']):
sales.at[idx, 'traceable_blend'] = False
但我还是想知道发生了什么 这个,
sales.iloc[idx]['traceable_blend']=False
,是索引链接,几乎永远不会起作用。事实上,您不需要循环:
sales['traceable_blend'] = sales['traceable_blend'].fillna(sales['shelf'].isin(['DRY BLENDS', 'LIQUID BLENDS']))
Pandas提供了两个用于检查缺失数据(NaN或null)的函数:
isnull()
和notnull()
——它们返回一个布尔值。我建议尝试这些,而不是isnan()
您还可以通过链接.values.any()
来确定序列中是否缺少任何值。此处不太可能需要显式循环。请提供一份报告。
sales['traceable_blend'] = sales['traceable_blend'].fillna(sales['shelf'].isin(['DRY BLENDS', 'LIQUID BLENDS']))