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

