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

Pandas高效合并多个年度CSV为指定宽格式DataFrame方法咨询

多份分年份人口CSV合并为规范宽表的高效实现方案

推荐优先使用「批量读入+长表转宽表」的实现方式,执行效率更高,扩展性更强,无需重复编写merge逻辑:

import pandas as pd

# 按需修改年份列表即可,新增年份直接追加
years = [2010, 2012, 2014, 2016, 2018, 2020]
df_pool = []

for y in years:
    # 读入单年数据
    tmp = pd.read_csv(f"{y}.csv")
    # 标记当前数据对应的年份
    tmp['year'] = y
    df_pool.append(tmp)

# 合并所有数据为长表结构
total_df = pd.concat(df_pool, ignore_index=True)

# 透视转换为预期的宽表结构
final_df = total_df.pivot(
    index=['state', 'gender'],
    columns='year',
    values='population'
# 列名重命名为规范格式,重置索引把state、gender转为普通列
).rename(columns=lambda x: f"population_{x}").reset_index()

该方案和你原本多次outer merge的效果完全一致,缺失的组合会自动填充NaN,无需额外处理。

如果你希望沿用merge的逻辑,也可以用reduce实现批量合并,避免手动重复写merge代码:

import pandas as pd
from functools import reduce

years = [2010, 2012, 2014, 2016, 2018, 2020]
df_pool = []

for y in years:
    tmp = pd.read_csv(f"{y}.csv")
    # 读入时直接重命名population列,避免重名冲突
    tmp = tmp.rename(columns={'population': f"population_{y}"})
    df_pool.append(tmp)

# 批量执行多表outer merge
final_df = reduce(
    lambda left, right: pd.merge(left, right, on=['state', 'gender'], how='outer'),
    df_pool
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:18:04