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

Python:如何将含字典的DataFrame列转换为目标多列

解决方案

错误原因分析

你遇到的TypeError: 'str' object does not support item assignment,核心问题是:dictionary列存储的是字符串格式的字典,而非真正的Python字典对象。当你遍历row['dictionary']时,实际是在遍历字符串的每个字符,dct是单个字符(字符串类型),因此无法执行字典赋值操作。

完整实现步骤

1. 导入依赖库

import pandas as pd
import ast

2. 转换字符串格式字典为真实字典

使用ast.literal_eval()安全地将字符串转为字典(比eval()更安全,避免代码注入风险):

# 假设你的原始DataFrame名为df
df['dictionary'] = df['dictionary'].apply(ast.literal_eval)

3. 提取目标数据并重组结构

通过遍历每行数据,提取日期、国家名称和对应fees.total值,再按日期分组整理成目标格式:

data_list = []
for _, row in df.iterrows():
    # 取出嵌套字典中的country部分
    country_data = row['dictionary']['country']
    # 获取国家名称(排除'fees'键,只取国家标识)
    country_name = next(key for key in country_data.keys() if key != 'fees')
    # 提取fees中的total值
    fee_total = country_data['fees']['total']
    # 整理成字典存入列表
    data_list.append({
        'date': row['date'],
        country_name: fee_total
    })

# 转为临时DataFrame
temp_df = pd.DataFrame(data_list)
# 按date分组,将同一日期的不同国家数据转为列,缺失值填充为NaN
df_final = temp_df.groupby('date').first().reset_index()

最终结果

运行后即可得到你需要的df_final:

date   USA  France    UK
0 2021-01-01 00:00:00+00:00  55.0    30.0   NaN
1 2021-01-02 00:00:00+00:00   NaN     NaN  24.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:30:51