如何规范化Pandas DataFrame中的嵌套JSON为T1_time等结构化字段?
解决方案:将嵌套JSON规范化为结构化字段
问题原因
你当前的DataFrame中,T1和T2列存储的是包含单个字典的数组,直接调用pd.json_normalize(df)无法解析这种嵌套结构——它默认处理的是字典或字典列表,而非包含数组的DataFrame列。
可行方案
方案1:从JSON字典直接处理(推荐)
先将JSON读取为字典,再分别对每个键对应的数组进行规范化,最后合并结果:
import pandas as pd import json path_to_json = 'dir/dir/data.json' # 读取JSON为字典 with open(path_to_json, 'r') as f: data = json.load(f) # 遍历每个键(T1、T2),规范化并添加前缀 processed_dfs = [] for key in data.keys(): # 规范化数组内的字典 temp_df = pd.json_normalize(data[key]) # 给列名加上前缀(如T1_time) temp_df.columns = [f"{key}_{col}" for col in temp_df.columns] processed_dfs.append(temp_df) # 合并所有处理后的DataFrame final_df = pd.concat(processed_dfs, axis=1)
方案2:基于已加载的DataFrame处理
如果你已经通过pd.read_json得到了原DataFrame,可以先取出每个数组列中的字典元素,再进行规范化:
import pandas as pd import json path_to_json = 'dir/dir/data.json' df = pd.read_json(path_to_json, lines=True) # 处理T1列:取出数组中的字典,规范化并重命名列 t1_df = pd.json_normalize(df['T1'].str[0]) t1_df.columns = ['T1_time', 'T1_data'] # 处理T2列:同理 t2_df = pd.json_normalize(df['T2'].str[0]) t2_df.columns = ['T2_time', 'T2_data'] # 合并结果 final_df = pd.concat([t1_df, t2_df], axis=1)
最终结果
两种方案都会生成如下结构的DataFrame:
| T1_time | T1_data | T2_time | T2_data |
|---|---|---|---|
| 2021-03-25T13:31:58+01:00 | -1 | 2021-03-25T13:17:02+01:00 | [23,35,54,44,55,44,33,44,55,66,88,65] |
内容的提问来源于stack exchange,提问作者ga1996
相关产品推荐
相关产品推荐

