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
相关产品推荐
相关产品推荐

