如何遍历DataFrame将vec_red等指定列替换为new_data对应值
pandas DataFrame指定多列批量赋值方案
直接使用pandas向量化操作实现即可,性能远高于嵌套循环,完全适配你的需求场景:
因为你提到new_data的元素顺序和DataFrame的索引完全对应,直接通过数组广播赋值,就能实现单值对应行三列同时更新:
import numpy as np import pandas as pd # 假设你的DataFrame变量名为df,目标列名为val_red、val_green、val_blue df[['val_red', 'val_green', 'val_blue']] = new_data[:, np.newaxis]
如果你要按列位置赋值(替换第3到第5列,pandas列索引从0开始计数,对应索引为2、3、4),可以用iloc实现:
df.iloc[:, 2:5] = new_data.reshape(-1, 1)
若必须沿用原有嵌套循环框架(不推荐,仅做参考)
你现有循环的索引顺序和label_idx的递增逻辑已经和DataFrame行顺序对齐,直接按索引定位行赋值即可:
label_idx = 0 for i in range(321): for j in range(284): df.loc[label_idx, ['val_red', 'val_green', 'val_blue']] = new_data[label_idx] label_idx += 1
注意事项
- 你描述中出现了
vec_red/vec_green/vec_blue和val_red/val_green/val_blue两组列名,使用时请替换为你实际DataFrame中的列名 - 十万行级别的数据处理场景下,向量化操作性能是循环的百倍以上,无特殊需求优先使用第一种方案
内容的提问来源于stack exchange,提问作者yras8
相关产品推荐
相关产品推荐

