求助:如何将嵌套JSON转换为指定结构的Pandas DataFrame
解决方案
先明确你的JSON结构大概是这样(方便对应代码逻辑):
{ "dateTime": "2024-01-01T00:00:00", "minutes": [ {"value": 12.3, "minute": "2024-01-01 00:01:00"}, {"value": 15.6, "minute": "2024-01-01 00:02:00"} ] }
以下是具体实现步骤:
1. 读取并解析JSON数据
可以用两种方式处理,根据你的JSON实际结构选择:
方式一:直接用Pandas读取提取数组
import pandas as pd # 读取JSON文件 raw_data = pd.read_json('你的文件路径.json') # 提取外层的minutes数组,转为DataFrame df = pd.DataFrame(raw_data['minutes'].iloc[0])
方式二:用json模块加载后处理(适合复杂嵌套场景)
import json import pandas as pd with open('你的文件路径.json', 'r', encoding='utf-8') as f: json_data = json.load(f) # 提取minutes数组生成DataFrame df = pd.DataFrame(json_data['minutes'])
2. 格式化minute列
先将minute字段转为datetime类型,再转换成你需要的YYYY-MM-DD HH:MM:SS格式:
# 转换为datetime类型(自动识别大部分标准格式) df['minute'] = pd.to_datetime(df['minute']) # 转为指定格式的字符串(如果不需要字符串格式,可跳过这步,保留datetime类型更适合后续分析) df['minute'] = df['minute'].dt.strftime('%Y-%m-%d %H:%M:%S')
3. 保留目标列(可选)
如果生成的DataFrame有多余列,直接筛选需要的列即可:
df = df[['minute', 'value']]
完整示例代码
import pandas as pd # 读取并处理JSON raw_data = pd.read_json('你的文件路径.json') df = pd.DataFrame(raw_data['minutes'].iloc[0]) # 格式化时间列 df['minute'] = pd.to_datetime(df['minute']).dt.strftime('%Y-%m-%d %H:%M:%S') # 输出结果 print(df.head())
常见问题排查
- 如果
raw_data['minutes'].iloc[0]报错,说明你的JSON外层是数组结构(比如包含多个带dateTime和minutes的对象),改用pd.json_normalize处理:
df = pd.json_normalize(json_data, record_path='minutes')
- 如果minute字段原始格式不标准,在
pd.to_datetime中指定格式参数,比如原始是DD/MM/YYYY HH:MM:
df['minute'] = pd.to_datetime(df['minute'], format='%d/%m/%Y %H:%M')
内容的提问来源于stack exchange,提问作者prof31
相关产品推荐
相关产品推荐

