如何使用Python将宽格式CSV表格重塑为长格式?
Python 重塑CSV数据:宽格式转长格式
我有一个宽格式的CSV文件,每行代表一个组织,列对应不同变量的值。需要将其重塑为每行对应一个(Date, Org ID, Variable, Value)元组的格式:
原始格式
| Date | Org ID | A | B | C | D |
|---|---|---|---|---|---|
| 6/30/2022 | 04815 | 10 | 15 | 20 | 30 |
| 6/30/2022 | 01712 | 4 | 8 | 9 | 14 |
目标格式
| Date | Org ID | Variable | Value |
|---|---|---|---|
| 6/30/2022 | 04815 | A | 10 |
| 6/30/2022 | 04815 | B | 15 |
| 6/30/2022 | 04815 | C | 20 |
| 6/30/2022 | 04815 | D | 30 |
| 6/30/2022 | 01712 | A | 4 |
| 6/30/2022 | 01712 | B | 8 |
| 6/30/2022 | 01712 | C | 9 |
| 6/30/2022 | 01712 | D | 14 |
解决方案
方法一:使用Pandas(推荐)
Pandas的melt方法专门用于这种宽转长的数据重塑,代码简洁高效:
import pandas as pd # 读取原始CSV df = pd.read_csv('your_input.csv') # 执行重塑操作 melted_df = df.melt( id_vars=['Date', 'Org ID'], # 保留不变的列 var_name='Variable', # 原变量列名的新列名 value_name='Value' # 原变量值的新列名 ) # 保存结果到新CSV melted_df.to_csv('your_output.csv', index=False)
方法二:原生Python实现
如果不想依赖第三方库,可以用标准库csv手动处理:
import csv # 读取原始文件 with open('your_input.csv', 'r', newline='') as infile: reader = csv.DictReader(infile) result_rows = [] for row in reader: # 提取固定列的值 date = row['Date'] org_id = row['Org ID'] # 遍历所有变量列,生成新行 for var in ['A', 'B', 'C', 'D']: result_rows.append({ 'Date': date, 'Org ID': org_id, 'Variable': var, 'Value': row[var] }) # 写入目标文件 with open('your_output.csv', 'w', newline='') as outfile: fieldnames = ['Date', 'Org ID', 'Variable', 'Value'] writer = csv.DictWriter(outfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(result_rows)
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

