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

Python中如何将CSV导入的DataFrame转换为按国家分组的嵌套字典

实现方案

你之前用to_dict('records')拿到的扁平列表、用groupby没出预期结果,核心是这两个方法本身不会自动把日期列、病例数值拆成两个平行的数组结构,需要手动做一次结构转换。
直接用下面的代码就能生成完全匹配要求的字典:

import pandas as pd

# 读取你的CSV,分隔符按实际文件格式调整即可
df = pd.read_csv("你的文件路径.csv")

# 除国家列之外的所有列都是日期,作为所有国家共用的time序列
date_cols = df.columns.drop("Country/Region").tolist()

# 初始化目标字典
result = {}

# 逐行遍历组装数据
for _, row in df.iterrows():
    country = row["Country/Region"]
    result[country] = {
        "time": date_cols,
        "cases": row[date_cols].tolist()
    }

针对你给出的示例数据,最终输出的结构完全匹配要求:

{
    "Afghanistan": {
        "time": ["1/22/20", "1/23/20", "1/24/20"],
        "cases": [100, 200, 300]
    },
    "Albania": {
        "time": ["1/22/20", "1/23/20", "1/24/20"],
        "cases": [400, 500, 0]
    },
    "Algeria": {
        "time": ["1/22/20", "1/23/20", "1/24/20"],
        "cases": [20, 30, 70]
    }
}

常见踩坑提示

  • 如果原始数据里有重复的国家行,记得提前按国家维度聚合数值(比如求和、取最大值)再遍历,不然同国家的后序行会覆盖字典里已有的键值
  • 别直接拿to_dict('index')的结果硬套,它返回的是单国家下“日期名:病例数”的嵌套键值对,依然需要二次拆分才能得到平行的time和cases列表,逻辑和上面的遍历写法是一致的
  • 之前用groupby没出结果,本质是分组操作只是把同国家的行聚到一起,不会自动生成你要求的两个固定键名的平行列表,最后还是要做结构重组才能得到目标格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 09:27:02