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

如何将含字典的Pandas DataFrame行拆分为邮箱与列表列

解决DataFrame嵌套字典拆分问题

这问题我之前处理API返回数据时也碰到过,这种每行只有单个键值对的字典结构,用pandas的apply方法就能轻松拆分出你要的两列。

步骤1:先模拟你的原始数据(方便测试)

首先我们先构造和你描述一致的DataFrame:

import pandas as pd

# 模拟API返回后生成的原始DataFrame
raw_data = [
    {'email@email.com': [{'action': 'data', 'date': 'date'}, {'action': 'data', 'date': 'date'}]},
    {'different-email@email.com': [{'action': 'data', 'date': 'date'}]}
]
df = pd.DataFrame(raw_data, columns=['Column'])

步骤2:拆分字典到目标列

因为每行的字典只有一个键值对,我们可以用next(iter(d.items()))快速提取唯一的邮箱(键)和对应的动作列表(值)。这里有两种写法,选你顺手的就行:

写法1:自定义函数(可读性更强)

def extract_email_and_actions(row):
    # 提取当前行字典里的唯一键值对
    email, action_list = next(iter(row['Column'].items()))
    # 返回指定列名的Series,方便合并到原DataFrame
    return pd.Series([email, action_list], index=['Column1', 'Column2'])

# 按行应用函数,替换原DataFrame
df = df.apply(extract_email_and_actions, axis=1)

写法2:Lambda简写(更简洁)

如果喜欢精简代码,用lambda一行搞定:

df = df['Column'].apply(lambda x: pd.Series(next(iter(x.items())), index=['Column1', 'Column2']))

最终效果

运行后你得到的DataFrame就会是你想要的结构:

Column1                                            Column2
0        email@email.com  [{'action': 'data', 'date': 'date'}, {'action...
1  different-email@email.com                [{'action': 'data', 'date': 'date'}]

这个方法的好处是不管你的邮箱字符串是什么格式,只要每行的字典只有一个键,就能准确拆分,完美适配API返回的这种结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:59:54