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

如何展平Pandas DataFrame中的Series列并生成带前缀字段列?

解决Pandas DataFrame展平Series列的需求

嘿,这个需求我熟!我帮你把包含字典列表的Applicant列展平成你要的Applicant.Name和Applicant.Age结构化列,两种实用方法送给你:

先确认你的原始数据

首先先把你的数据定义写清楚,方便后续测试:

import pandas as pd

data = pd.DataFrame(
    [
        ['TRAN', [{'Name':'Ben','Age':'24'}], 'T', 'Good'],
        ['LMI', [{'Name':'Zoe','Age':'32'}], 'U', 'Better'],
        ['ARN', [{'Name':'Jack','Age':'28'}], 'V', 'Best']
    ],
    columns=['Type', 'Applicant', 'Decision', 'Action']
)

方法一:分步处理(直观易理解)

这种方法适合新手,每一步都清晰可控:

  1. 炸开列表:因为Applicant列的每个元素是长度为1的列表,先用explode把列表展开成单独的字典行
  2. 解析字典:把字典列转换成单独的DataFrame
  3. 重命名列:给新列加上Applicant.前缀,符合你的要求
  4. 合并数据:把原DataFrame的其他列和新解析的列合并,删除原Applicant列
# 1. 炸开列表(每个列表只有一个元素,所以行数不变)
exploded_df = data.explode('Applicant')

# 2. 将字典列转换为结构化DataFrame
applicant_details = exploded_df['Applicant'].apply(pd.Series)

# 3. 重命名列名
applicant_details = applicant_details.rename(
    columns={'Name': 'Applicant.Name', 'Age': 'Applicant.Age'}
)

# 4. 合并并清理数据
final_df = pd.concat([exploded_df.drop('Applicant', axis=1), applicant_details], axis=1)

方法二:简洁写法(适合快速实现)

如果你的Applicant列每个列表固定只有一个字典,可以用这种更简洁的写法:

# 提取每个列表的第一个字典,直接转为DataFrame
applicant_df = pd.DataFrame(data['Applicant'].str[0].tolist())

# 重命名列后和原数据合并(删除原Applicant列)
final_df = data.drop('Applicant', axis=1).join(
    applicant_df.rename(columns={'Name':'Applicant.Name', 'Age':'Applicant.Age'})
)

最终结果验证

两种方法得到的结果都是你要的结构:

Type Decision  Action Applicant.Name Applicant.Age
0  TRAN        T    Good            Ben            24
1   LMI        U  Better            Zoe            32
2   ARN        V    Best           Jack            28

注意事项

  • 如果你的Applicant列中存在包含多个字典的列表,方法一的explode会自动把每个字典拆成单独的行,而方法二只会取第一个字典,这时候需要根据你的业务需求调整
  • 如果字典中的键不固定(比如有的字典没有Age字段),apply(pd.Series)会自动填充NaN,适合处理异构数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:34:55