如何规范化或展开JSON文件中的features字段?
嵌套JSON列展开解决方案
你的问题核心是DataFrame中features列存储了嵌套的JSON对象,直接使用顶层的json_normalize无法解析嵌套结构,以下是两种快速解决方法:
方法一:针对已加载的DataFrame处理嵌套列
先读取JSON到DataFrame,再单独对features列执行标准化,最后合并结果:
import pandas as pd # 读取JSON文件 data = pd.read_json('C:\\Users\\ryans\\Desktop\\test.json') # 展开features列的嵌套结构 features_expanded = pd.json_normalize(data['features']) # 合并原DataFrame的其他列与展开后的数据 final_df = pd.concat([data.drop('features', axis=1), features_expanded], axis=1) # 查看结果 print(final_df.head())
方法二:从原始JSON直接解析嵌套结构
跳过中间DataFrame的步骤,直接加载原始JSON后提取嵌套的features数据:
import pandas as pd import json # 加载原始JSON数据 with open('C:\\Users\\ryans\\Desktop\\test.json') as data_file: raw_data = json.load(data_file) # 提取每个元素的features字段并标准化 features_df = pd.json_normalize([item['features'] for item in raw_data]) # 保留原有的type列(可选) type_column = pd.Series([item['type'] for item in raw_data], name='type') final_df = pd.concat([type_column, features_df], axis=1) # 查看结果 print(final_df.head())
补充说明
- 如果
properties字段下还有更深层级的嵌套,json_normalize会自动将其展开为properties.GEO_ID格式的列名;若想移除前缀,可添加record_prefix参数,例如:pd.json_normalize(data['features'], record_prefix='props_')。 - 两种方法的核心都是针对嵌套的JSON对象单独执行标准化,而不是对整个DataFrame操作。
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

