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

从Pandas DataFrame嵌套字典中提取值并转换格式

处理嵌套字典提取值并转换Pandas DataFrame格式

原始DataFrame

NameAB
$overall{'all': 26929}{'all': 2036}
QWE{'$overall': {'all': 6},'Mar 18, 2021': {'all': 3},'Mar 3, 2021': {'all': 3}}{'$overall': {'all': 3},'Mar 3, 2021': {'all': 2},'Mar 18, 2021': {'all': 1}}

期望输出

NameDateAB
$overall269292036
QWEMar 3, 202132
QWEMar 18, 202131

尝试的代码及错误输出

尝试使用以下代码提取值:

df = df.apply(lambda s: s.str['all']).fillna(0).convert_dtypes()

得到错误输出:

NameAB
$overall269292036
QWE00
QWE00

df.to_dict()返回结果:

{
    'A': {
        '$XYZ': {'all': 26929},   
        'QWE': {
            '$overall': {'all': 6},    
            'Mar 18, 2021': {'all': 3},    
            'Mar 3, 2021': {'all': 3}
        }
    },
    'B': {
        '$XYZ': {'all': 2036},   
        'QWE': {
            '$overall': {'all': 3},    
            'Mar 3, 2021': {'all': 2},    
            'Mar 18, 2021': {'all': 1}
        }
    },
    'Name': {
        '$XYZ': '$overall',   
        'QWE': 'QWE'
    }
}

解决方法

通过遍历每行数据,区分处理汇总行和带日期的行,提取对应值并构造目标结构:

import pandas as pd

# 构造原始DataFrame(可替换为实际数据)
data = {
    'Name': ['$overall', 'QWE'],
    'A': [{'all': 26929}, {'$overall': {'all': 6}, 'Mar 18, 2021': {'all': 3}, 'Mar 3, 2021': {'all': 3}}],
    'B': [{'all': 2036}, {'$overall': {'all': 3}, 'Mar 3, 2021': {'all': 2}, 'Mar 18, 2021': {'all': 1}}]
}
df = pd.DataFrame(data)

result_rows = []

for idx, row in df.iterrows():
    name = row['Name']
    a_dict = row['A']
    b_dict = row['B']
    
    if name == '$overall':
        # 处理汇总行,直接提取all值
        result_rows.append({
            'Name': name,
            'Date': '',
            'A': a_dict['all'],
            'B': b_dict['all']
        })
    else:
        # 处理带日期的行,排除$overall键,展开每个日期
        date_keys = [k for k in a_dict.keys() if k != '$overall']
        for date in date_keys:
            result_rows.append({
                'Name': name,
                'Date': date,
                'A': a_dict[date]['all'],
                'B': b_dict[date]['all']
            })

# 生成目标DataFrame
final_df = pd.DataFrame(result_rows)
print(final_df)

执行后即可得到期望的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:44:59