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

如何优雅地将dict of list of dict结构数据导入Pandas DataFrame并处理缺失值

优雅转换嵌套字典到带缺失值的DataFrame

嘿,我来分享几个实用又优雅的方法,帮你把这个嵌套字典结构的数据集转换成符合需求的DataFrame,同时自动处理缺失的日期值:

方法一:扁平化数据后透视(推荐,代码简洁易读)

这个思路先把嵌套的结构扁平化成统一的三元组格式,再用pandas的透视功能重塑成目标结构,缺失值会自动填充为NaN:

import pandas as pd

# 你的原始数据
data = {
    'Col1Name': [{'date': '2020', 'value': '1111'}, {'date': '2019', 'value': '2222'}, {'date': '2018', 'value': '3333'}],
    'Col2Name': [{'date': '2020', 'value': '777'}, {'date': '2018', 'value': '999'}]
}

# 把嵌套数据扁平化成 (列名, 日期, 值) 的三元组列表
flat_entries = [
    (col_name, item['date'], item['value'])
    for col_name, items in data.items()
    for item in items
]

# 转换成基础DataFrame
df = pd.DataFrame(flat_entries, columns=['column', 'date', 'value'])

# 透视得到目标结构:列名为日期,索引为原列名
final_df = df.pivot(index='column', columns='date', values='value')

# 调整日期列按降序排列,匹配你要的格式
final_df = final_df.reindex(sorted(final_df.columns, reverse=True), axis=1)

print(final_df)

运行后输出:

date      2020 2019 2018
column                  
Col1Name  1111 2222 3333
Col2Name   777  NaN  999

方法二:分步处理每个列后合并

这个方法适合需要对每个列单独做预处理的场景,先把每个列的列表转成小DataFrame,再合并到一起:

import pandas as pd

data = {
    'Col1Name': [{'date': '2020', 'value': '1111'}, {'date': '2019', 'value': '2222'}, {'date': '2018', 'value': '3333'}],
    'Col2Name': [{'date': '2020', 'value': '777'}, {'date': '2018', 'value': '999'}]
}

# 存储每个列处理后的小DataFrame
dfs = {}
for col_name, items in data.items():
    # 把当前列的条目转成DataFrame,设置date为索引
    temp_df = pd.DataFrame(items).set_index('date')
    # 转置后重命名索引为原列名,方便合并
    dfs[col_name] = temp_df.T.rename(index={'value': col_name})

# 用outer join合并所有小DataFrame,保留所有日期
final_df = pd.concat(dfs.values(), axis=0)

# 调整日期列按降序排列
final_df = final_df.reindex(sorted(final_df.columns, reverse=True), axis=1)

print(final_df)

输出结果和方法一完全一致,同样会自动为缺失的日期填充NaN。

两种方法都能完美处理缺失值,而且代码简洁易维护,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 23:02:44