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

如何将含字典列表的DataFrame列拆分为独立列?

问题描述

现有DataFrame列df_cost['region.localCurrency'],数据格式如下:

df_cost['region.localCurrency']:

0     [{'content': 'Dirham', 'languageCode': 'EN'}]
1     [{'content': 'Dirham', 'languageCode': 'EN'}]
2     [{'content': 'Dirham', 'languageCode': 'EN'}]
3       [{'content': 'Euro', 'languageCode': 'DE'}]
4       [{'content': 'Euro', 'languageCode': 'DE'}]
5       [{'content': 'Euro', 'languageCode': 'DE'}]
6       [{'content': 'Euro', 'languageCode': 'DE'}]
7       [{'content': 'Euro', 'languageCode': 'DE'}]
8       [{'content': 'Euro', 'languageCode': 'DE'}]
9       [{'content': 'Euro', 'languageCode': 'DE'}]
10      [{'content': 'Euro', 'languageCode': 'DE'}]
11      [{'content': 'Euro', 'languageCode': 'DE'}]
12      [{'content': 'Euro', 'languageCode': 'DE'}]
13    [{'content': 'Dirham', 'languageCode': 'EN'}]
14    [{'content': 'Dirham', 'languageCode': 'EN'}]
15    [{'content': 'Dirham', 'languageCode': 'EN'}]
16      [{'content': 'Euro', 'languageCode': 'DE'}]
17      [{'content': 'Euro', 'languageCode': 'DE'}]
18      [{'content': 'Euro', 'languageCode': 'DE'}]
19      [{'content': 'Euro', 'languageCode': 'DE'}]
Name: region.localCurrency, dtype: object

需求是将该列中的字典键值对拆分为localCurrencyContent和localCurrencyCode两列并添加到原df_cost中。尝试了以下代码:

df_split=pd.DataFrame(df_cost['region.localCurrency'].apply(pd.Series), columns=['localCurrencyContent', 'localCurrencyCode'])
print(df_split)

但结果中两列均为NaN,未得到预期的'Euro'、'DE'等值。

解决方法

问题原因

原代码失败的核心原因:df_cost['region.localCurrency']的每一行是包含单个字典的列表,而非直接的字典对象。直接对列表调用apply(pd.Series)会将列表拆分为行级数据,但列表仅含一个元素,生成的DataFrame只有0列,指定的localCurrencyContent和localCurrencyCode列不存在,因此全为NaN。

正确实现方式

方式一:分步处理(清晰直观)

import pandas as pd

# 1. 提取列表中的字典元素
df_cost['temp_dict'] = df_cost['region.localCurrency'].str[0]

# 2. 将字典拆分为指定列
df_split = df_cost['temp_dict'].apply(pd.Series).rename(
    columns={'content': 'localCurrencyContent', 'languageCode': 'localCurrencyCode'}
)

# 3. 合并到原DataFrame
df_cost = pd.concat([df_cost, df_split], axis=1)

# 4. 可选:删除临时列
df_cost.drop('temp_dict', axis=1, inplace=True)

方式二:链式操作(简洁高效)

无需创建临时列,直接通过lambda提取字典并拆分:

import pandas as pd

df_cost[['localCurrencyContent', 'localCurrencyCode']] = df_cost['region.localCurrency'].apply(
    lambda x: pd.Series(x[0])
).rename(columns={'content': 'localCurrencyContent', 'languageCode': 'localCurrencyCode'})

执行上述代码后,原df_cost会新增localCurrencyContent和localCurrencyCode两列,对应字典中的content和languageCode值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:40:29