Pandas使用双参数for循环修改DataFrame列值不生效问题求解
问题原因
你遍历拿到的i和j都是DataFrame对应值的拷贝,修改临时变量j不会把结果写回原DataFrame,因此原数据不会发生变化。
推荐解法(向量化操作,性能最优)
直接用pandas原生的布尔索引按条件赋值,无需写for循环,处理效率远高于Python层级的循环:
# 先统一转换列数据类型 df['day_test'] = df['day_test'].astype(int) df['Temp Column'] = df['Temp Column'].astype(int) # 按规则替换负值 df.loc[(df['day_test'] == 2) & (df['Temp Column'] < 0), 'Temp Column'] = 2 df.loc[(df['day_test'] == 1) & (df['Temp Column'] < 0), 'Temp Column'] = 1
原有for循环修改方案
如果一定要使用循环实现,需要通过索引定位到DataFrame的对应位置直接赋值:
df['day_test'] = df['day_test'].astype(int) df['Temp Column'] = df['Temp Column'].astype(int) for idx in df.index: day_val = df.loc[idx, 'day_test'] temp_val = df.loc[idx, 'Temp Column'] if temp_val < 0: if day_val == 2: df.loc[idx, 'Temp Column'] = 2 elif day_val == 1: df.loc[idx, 'Temp Column'] = 1
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

