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

在Pandas DataFrame中提取指定键对应数值(禁用str.split()方法)

Pandas从字典列提取指定字段值的解决方案

问题说明

现有如下示例数据集,其中Text列存储字典类型数据:

No Text
1  {"duration_incoming_daytime": 6034, 
    "percent_incoming_daytime": 42.73, 
    "percent_other_calls": 42.73, 
    "total_calls": 110}

需求为提取"duration_incoming_daytime"和"total_calls"对应的数值,且不能使用str.split()方法(因数据顺序不固定),最终需新增两列展示对应数值,效果如下:

No Text                                  duration_incoming_daytime   total_calls
1  {"duration_incoming_daytime": 6034,   6034                        110
    "percent_incoming_daytime": 42.73, 
    "percent_other_calls": 42.73, 
    "total_calls": 110}

示例DataFrame代码如下:

import pandas as pd   
No = [1]   
Text = [{"duration_incoming_daytime": 6034, "percent_incoming_daytime": 42.73, "percent_other_calls": 42.73, "total_calls": 110}]   

df = pd.DataFrame({"No":No, "Text":Text})

解决方案

因为Text列本身是字典类型,无需用字符串分割,直接通过字典键访问即可,以下是两种实用方法:

方法1:逐列提取(适合少量字段)

用apply配合lambda函数直接提取目标键对应的值:

# 新增duration_incoming_daytime列
df['duration_incoming_daytime'] = df['Text'].apply(lambda x: x['duration_incoming_daytime'])
# 新增total_calls列
df['total_calls'] = df['Text'].apply(lambda x: x['total_calls'])

方法2:批量展开合并(适合多字段提取)

把字典列直接展开为DataFrame,再合并回原表,只保留需要的字段:

# 将Text列的字典展开成单独的DataFrame
text_expanded = df['Text'].apply(pd.Series)
# 合并原表和展开后的指定列
df = pd.concat([df, text_expanded[['duration_incoming_daytime', 'total_calls']]], axis=1)

两种方法都不会受字典内键的顺序影响,运行后即可得到符合需求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:36:26