如何检测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
相关产品推荐
相关产品推荐

