如何通过遍历数组的for循环替换DataFrame中的指定值?
按指定索引替换Pandas DataFrame列值的解决方案
你的需求是将DataFrame中索引为1和3的行的ind_name列,分别替换为one和three。原代码的双层循环逻辑有问题——它会让每个索引被所有目标值遍历覆盖,最终所有指定索引都会被设为最后一个designation值,无法达到预期效果。
方法一:配对遍历赋值(适合小数据集)
用zip()将索引数组和目标值数组一一配对,遍历每一组并赋值:
import pandas as pd data = [['h', 'zero'], ['i', 'circle'], ['j', 'two'], ['k','square']] df = pd.DataFrame(data, columns=['letters', 'ind_name']) ind_num = [1, 3] designation = ['one', 'three'] # 配对索引与目标值,逐个替换 for idx, new_val in zip(ind_num, designation): df.iloc[idx, 1] = new_val # iloc[row索引, 列索引]直接赋值 print(df)
方法二:批量赋值(高效推荐,适合大数据集)
利用Pandas的批量操作特性,直接选中目标行和列一次性赋值,避免循环带来的性能损耗:
import pandas as pd data = [['h', 'zero'], ['i', 'circle'], ['j', 'two'], ['k','square']] df = pd.DataFrame(data, columns=['letters', 'ind_name']) ind_num = [1, 3] designation = ['one', 'three'] # 批量替换:先获取列的索引位置,再批量赋值 target_col_idx = df.columns.get_loc('ind_name') df.iloc[ind_num, target_col_idx] = designation print(df)
最终输出结果
两种方法都会得到预期的DataFrame:
letters ind_name 0 h zero 1 i one 2 j two 3 k three
内容的提问来源于stack exchange,提问作者dane w
相关产品推荐
相关产品推荐

