如何在满足指定条件时替换Pandas DataFrame中原数据的指定值?
直接在原DataFrame中替换指定条件的数值
方法一:使用.loc结合replace(原地修改)
利用.loc精准定位符合条件的行和PC_DK列,通过replace实现原地修改,直接作用于原DataFrame:
import numpy as np # 定位目标行和列,原地替换NaN与1为88 df2.loc[condition, 'PC_DK'].replace({np.nan: 88, 1: 88}, inplace=True)
也可以写成赋值形式,效果完全一致:
df2.loc[condition, 'PC_DK'] = df2.loc[condition, 'PC_DK'].replace({np.nan: 88, 1: 88})
方法二:直接筛选赋值
先组合出更精准的目标条件(原条件 + PC_DK为NaN或1),再直接赋值:
# 组合目标条件:满足原筛选规则,且PC_DK是NaN或1 target_condition = condition & (df2['PC_DK'].isna() | (df2['PC_DK'] == 1)) # 原地修改数值 df2.loc[target_condition, 'PC_DK'] = 88
为什么之前的方法无法修改原DataFrame?
你之前用df2[condition]['PC_DK']属于链式索引(先取行子集再取列),pandas在这种场景下返回的通常是原DataFrame的副本而非视图,因此对df_condition的修改只会作用于副本,不会同步到原df2。而.loc是pandas推荐的索引方式,能确保操作直接作用于原DataFrame的视图,实现原地修改。
内容的提问来源于stack exchange,提问作者Joshua Chung
相关产品推荐
相关产品推荐

