使用pandas如何仅将指定列的NaN值与负数替换为0

错误原因
之前的操作是直接对整个DataFrame做了条件替换,没有限定操作的列范围,导致满足条件的行全列数值都被修改。
正确操作方法
方法1:已知最后一列的列名(假设列名为value)
单独对目标列执行替换操作即可:
- 替换NaN为0
df['value'] = df['value'].fillna(0)
- 替换负值为0
df.loc[df['value'] < 0, 'value'] = 0
也可以合并为一行代码:
df['value'] = df['value'].where(df['value'] >= 0, 0).fillna(0)
方法2:未知列名,固定操作最后一列
先通过索引取到最后一列的列名,再执行上述操作:
# 取最后一列列名 last_col = df.columns[-1] # 替换NaN和负值 df[last_col] = df[last_col].fillna(0) df.loc[df[last_col] < 0, last_col] = 0
注意事项
不要省略loc方法中第二个参数的列名指定,如果写成df[df[last_col] < 0] = 0,就会把满足条件的整行所有列都赋值为0,就是之前遇到的异常情况。
内容的提问来源于stack exchange,提问作者David H
相关产品推荐
相关产品推荐

