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

如何检测Pandas DataFrame列是否含字典并拆分为独立列

检测Pandas DataFrame中包含单个字典的列

要识别列中存在单个字典值的列,可以通过遍历DataFrame的列,检查列内元素的类型:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'id': [1, 2, 3],
    'user_info': [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}, None],
    'metadata': [{'tag': 'vip'}, {'tag': 'normal'}, {'tag': 'guest'}],
    'score': [85, 90, 78]
})

# 筛选包含单个字典的列
dict_columns = [col for col in df.columns if df[col].apply(lambda x: isinstance(x, dict)).any()]
print(dict_columns)  # 输出: ['user_info', 'metadata']

这段代码通过isinstance(x, dict)判断元素是否为字典,any()确保列中至少存在一个字典元素时被纳入结果,同时兼容列内存在空值(如None)的情况。

将字典列拆分为独立列

找到目标列后,使用pd.json_normalize()可以快速将字典结构展开为独立列,同时保留原DataFrame的其他数据:

# 遍历字典列进行拆分
for col in dict_columns:
    # 规范化字典列
    normalized_df = pd.json_normalize(df[col])
    # 为新列添加原列名前缀,避免列名冲突
    normalized_df.columns = [f"{col}_{sub_col}" for sub_col in normalized_df.columns]
    # 合并到原DataFrame,同时移除原字典列
    df = pd.concat([df.drop(col, axis=1), normalized_df], axis=1)

print(df)

执行后,原user_info列会被拆分为user_info_name和user_info_age,metadata列会被拆分为metadata_tag,空值对应的拆分列会填充为NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:25