You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 23:45:42