如何用布尔掩码将Pandas DataFrame指定单元格替换为NaN而非整行置空
你当前的写法会导致整行置空,是因为df.where()传入的是单列布尔掩码,pandas会自动按行广播匹配,只要单列对应行不满足条件,就会将整行所有字段都置为NaN。
解决方案
场景1:仅替换「Energy Supply per Capita」列中的「…」为NaN
直接对单列做处理即可,两种常用写法:
- 使用replace方法(更简洁)
import pandas as pd df['Energy Supply per Capita'] = df['Energy Supply per Capita'].replace('…', pd.NA)
- 沿用现有掩码逻辑,单独对目标列应用where
mask = df['Energy Supply per Capita'] != "…" df['Energy Supply per Capita'] = df['Energy Supply per Capita'].where(mask)
场景2:替换整个DataFrame所有列中出现的「…」为NaN
直接全局替换即可,无需单独编写掩码:
df = df.replace('…', pd.NA)
如果后续需要将目标列转为数值类型,可额外执行df['Energy Supply per Capita'] = pd.to_numeric(df['Energy Supply per Capita'])完成转换。
内容的提问来源于stack exchange,提问作者Haamed Rahman
相关产品推荐
相关产品推荐

