Pandas DataFrame数据处理:批量修改指定列数值
解决方案(Pandas)
针对你的需求,以下两种方法都能高效完成单位转换,同时完全保留DataFrame原有结构:
方法1:按污染物类型匹配列(灵活适配不同乘数)
如果两种污染物的转换乘数不同,且列名有规律(比如格式为[站点名]_[污染物名]),可以用这种方式:
import pandas as pd # 假设你的污染物转换规则:污染物A乘0.001,污染物B乘100 convert_rules = {"A": 0.001, "B": 100} # 筛选所有需要转换的列(列名包含A或B) cols_to_convert = [col for col in df.columns if any(p in col for p in convert_rules.keys())] # 遍历列进行转换 for col in cols_to_convert: # 从列名提取污染物类型(根据实际列名格式调整split逻辑) pollutant = col.split("_")[-1] df[col] = df[col] * convert_rules[pollutant]
方法2:批量列操作(代码更简洁,适合同污染物统一乘数)
如果同一种污染物的所有列乘数相同,直接用字符串匹配批量处理:
# 给所有包含"A"的列乘0.001 df.loc[:, df.columns.str.contains("A")] *= 0.001 # 给所有包含"B"的列乘100 df.loc[:, df.columns.str.contains("B")] *= 100
关键注意事项
- 如果不想修改原始DataFrame,先做副本:
new_df = df.copy(),再对new_df操作 - 7万条属于小数据量,两种方法都不会有性能问题
- 列名无规律的话,直接手动列出需要修改的8列即可,比如:
cols = ["Station1_A", "Station1_B", "Station2_A", "Station2_B", "Station3_A", "Station3_B", "Station4_A", "Station4_B"] # 假设A的乘数是0.001,B是100,可拆分处理 df[cols[::2]] *= 0.001 # 取所有A的列 df[cols[1::2]] *= 100 # 取所有B的列
内容的提问来源于stack exchange,提问作者desperate_house_coder
相关产品推荐
相关产品推荐

