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

如何在pandas中展开列内类字典取值并生成独立新列

实现方法

你可以通过两种常用的pandas操作实现需求,两种方法都包含空值、空字符串过滤逻辑,保证最终生成的data_usage和device_name列无无效值:

方法1:使用pd.json_normalize(推荐,性能更优,适合字典键多的场景)

该方法会自动解析list列的所有字典键,你可以按需保留需要的字段:

import pandas as pd

# 解析list列的字典为独立DataFrame
expanded = pd.json_normalize(df['list'])
# 拼接原表非list列 + 所需两个新列,删除原list列
df_result = pd.concat(
    [df.drop(columns=['list']), expanded[['data_usage', 'device_name']]],
    axis=1
)
# 过滤存在空值、空字符串的行
df_result = df_result.dropna(subset=['data_usage', 'device_name'])
df_result = df_result[(df_result['data_usage'] != '') & (df_result['device_name'] != '')]

方法2:使用.str.get(写法更简洁,适合仅需取少量键的场景)

直接从字典列按键取值生成新列,无需解析全部字段:

import pandas as pd

# 直接提取指定键的值生成新列
df['data_usage'] = df['list'].str.get('data_usage')
df['device_name'] = df['list'].str.get('device_name')
# 删除原list列
df_result = df.drop(columns=['list'])
# 过滤存在空值、空字符串的行
df_result = df_result.dropna(subset=['data_usage', 'device_name'])
df_result = df_result[(df_result['data_usage'] != '') & (df_result['device_name'] != '')]

处理后最终的DataFrame将包含id、date、data_usage、device_name四列,符合要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:30:05