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

高效转置含年份列的CSV数据并生成年份-值对的方法

问题解答

正则表达式不是这个数据转换任务的正确解决方案。

这个需求属于典型的**宽表转长表(Unpivot)**操作,用pandas的内置melt()方法才是最直接、高效且可靠的方案,尤其适合年份列数量不固定的场景。

具体实现步骤

  1. 读取CSV文件为DataFrame:
import pandas as pd

df = pd.read_csv('your_data.csv')
  1. 执行宽转长操作:
# 指定不需要转置的标识列
id_columns = ['Name', 'Age']
# 自动识别所有年份列(除标识列外的所有列)
year_columns = [col for col in df.columns if col not in id_columns]

# 转置数据
result_df = df.melt(
    id_vars=id_columns,
    var_name='Year',  # 转置后年份列的名称
    value_name='Value'  # 转置后数值列的名称
)

# 如果需要像示例那样只保留部分年份,可添加过滤(可选)
# result_df = result_df[result_df['Year'].isin(['2020', '2021'])]

# 输出转换后的CSV
print(result_df.to_csv(index=False))

为什么不推荐正则表达式?

正则表达式的核心作用是文本匹配与处理,虽然可以用来辅助识别年份列,但无法完成数据结构的转置重塑。用专门的数据重塑方法:

  • 代码更简洁易读,无需编写复杂的正则规则
  • 自动适配不同数量的年份列,扩展性更强
  • 能正确保留数据类型(比如数值型的Value不会被转为文本)
  • 避免正则匹配时可能出现的边界错误(比如列名包含数字但不是年份的情况)

内容的提问来源于stack exchange,提问作者pratush maheshwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:55:30