高效转置含年份列的CSV数据并生成年份-值对的方法
问题解答
正则表达式不是这个数据转换任务的正确解决方案。
这个需求属于典型的**宽表转长表(Unpivot)**操作,用pandas的内置melt()方法才是最直接、高效且可靠的方案,尤其适合年份列数量不固定的场景。
具体实现步骤
- 读取CSV文件为DataFrame:
import pandas as pd df = pd.read_csv('your_data.csv')
- 执行宽转长操作:
# 指定不需要转置的标识列 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
相关产品推荐
相关产品推荐

