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

如何使用Pandas对含多国家列的CSV数据实现指定结构转换?

解决方案

你要实现的是典型的宽表转长表场景,用melt()完全可以实现,不需要手动枚举所有国家列,核心是正确配置id_vars参数即可:

  • 首先确认原始数据里的公共维度列:也就是除了150个国家列之外,你需要保留的固定维度字段,比如统计日期、指标名称、指标编码这类字段,只需要把这些字段配置到id_vars参数中,剩下的所有列会被melt()自动识别为要转成行的国家列。

代码示例1:已知公共维度列的列名

# 把列表里的字段替换成你实际的公共维度列名即可
result = reading.melt(
    id_vars=["统计日期", "指标名称", "指标编码"],
    var_name="国家", # 转换后存储国家名称的列名,可自定义
    value_name="统计值" # 转换后存储对应数值的列名,可自定义
)

代码示例2:仅知道公共维度列的位置

如果公共维度列都在表头的前N位,不需要知道具体列名也可以实现:

# 示例:前3列是公共维度列,后面所有列均为国家列
public_cols = reading.columns[:3]
result = reading.melt(
    id_vars=public_cols,
    var_name="国家",
    value_name="统计值"
)

可选优化

  • 过滤无数据的空值条目:result = result.dropna(subset=["统计值"])
  • 统一数值列的数据类型:result["统计值"] = pd.to_numeric(result["统计值"], errors="coerce")

之前melt()输出不符合预期基本都是id_vars参数配置错误,要么是误把国家列放进了保留维度,要么是没有正确指定转换后的列名,上述方案不需要手动处理任何国家列,适配150个甚至更多国家列的转换需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:27:05