You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何原地更新DataFrame:将指定行的'int'替换为NaN

解决方法:布尔索引结合replace实现原地更新

首先定义原始DataFrame:

import pandas as pd
import numpy as np

df = pd.DataFrame({'Id':[1,1,2,3],'Origin':['int','int','pot','pot'],'Origin2':['pot','int','int','int']})

问题说明

需要将Id=1的行(索引0、1)中值为'int'的元素替换为np.nan,但df.update()无法实现用NaN覆盖非NaN值,因此需要换用其他方式。

可行方案

方案1:全局目标行替换(原地更新)

直接通过布尔索引定位目标行,执行替换后赋值回原DataFrame:

# 生成Id=1的行掩码
mask = df['Id'].eq(1)
# 对目标行执行替换并原地更新
df.loc[mask] = df.loc[mask].replace('int', np.nan)

执行后得到目标结果:

print(df)
#    Id Origin Origin2
# 0   1    NaN     pot
# 1   1    NaN     NaN
# 2   2    pot     int
# 3   3    pot     int

方案2:指定列精准更新

如果仅需更新Origin和Origin2列,可以缩小操作范围:

cols_to_update = ['Origin', 'Origin2']
df.loc[mask, cols_to_update] = df.loc[mask, cols_to_update].replace('int', np.nan)

补充说明

df.update()的设计逻辑是仅用非NaN值更新原DataFrame,因此无法实现用NaN覆盖已有非NaN内容,而直接通过.loc定位赋值的方式可以绕过这个限制,直接完成原地更新。

内容的提问来源于stack exchange,提问作者INGl0R1AM0R1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:33:27