如何将Pandas DataFrame中的嵌套JSON/字典拆分为独立列
解决Pandas中嵌套JSON列的展开问题
问题分析
你的query_result列存储的是嵌套结构的JSON字符串,需要将其展开为四个独立列:server_windows、server_linux、workstation_windows、workstation_mac。之前尝试ast模块未成功,大概率是缺少了嵌套结构的后续展开步骤。
解决方案
通过解析JSON字符串为字典 + 展开嵌套字典为DataFrame两步即可完成需求,具体代码如下:
1. 导入依赖模块
import pandas as pd import ast
2. 读取并预处理数据
先读取CSV文件,再将query_result列的字符串解析为Python字典(兼容异常格式):
# 读取数据 df = pd.read_csv('data.csv', index_col='created_at', parse_dates=True) # 解析JSON字符串为字典,处理可能的格式异常 def parse_nested_json(s): try: return ast.literal_eval(s) except (ValueError, TypeError): # 解析失败时返回空字典,避免后续报错 return {} df['query_result'] = df['query_result'].apply(parse_nested_json)
3. 展开嵌套字典为目标列
使用pd.json_normalize自动展开嵌套结构,重命名列后合并到原DataFrame:
# 展开嵌套字典 result_df = pd.json_normalize(df['query_result']) # 重命名列以匹配需求 result_df = result_df.rename(columns={ 'servers.windows': 'server_windows', 'servers.linux': 'server_linux', 'workstations.windows': 'workstation_windows', 'workstations.mac': 'workstation_mac' }) # 合并到原DataFrame并移除原query_result列 df = pd.concat([df.drop('query_result', axis=1), result_df], axis=1)
最终结果
处理后的DataFrame结构示例:
country query_success server_windows server_linux workstation_windows workstation_mac created_at 2022-08-18 08:38:38 Germany True 0 0 0 0
异常处理补充
如果展开后出现缺失值,说明对应行的query_result中没有目标嵌套键,可添加以下代码填充默认值:
result_df = result_df.fillna(0)
内容的提问来源于stack exchange,提问作者Swedish Mike
相关产品推荐
相关产品推荐

