You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取JSON转为DataFrame后按关键字段筛选数据的问题

解决JSON转DataFrame后的筛选问题

你当前遇到的核心问题是读取JSON的方式不对,导致生成的DataFrame是嵌套结构(每个年份列存的是字典列表),没法直接按DayofWeek或Year这类字段筛选。咱们先把数据转换成标准的扁平化结构,再做筛选就轻松多了。

第一步:正确读取并扁平化JSON数据

你的原始JSON是以年份为键,每个键对应一组包含详细字段的列表。我们需要把这些嵌套数据展开成行式DataFrame,让每个字段对应单独的列:

import pandas as pd
import json

with open('sample.json') as json_data:
    data = json.load(json_data)

# 遍历所有年份的条目,把嵌套数据展开成扁平字典
flat_data = []
for year, entries in data.items():
    for entry in entries:
        flat_data.append(entry)

# 生成标准结构的DataFrame
df = pd.DataFrame(flat_data)

运行后df的结构会是这样的:

DayofWeekDateYearyxMinute
42015-02-06 00:00:00201543.210.397NaN
42016-02-06 00:00:00201643.210.3970
42017-02-06 00:00:00201743.210.3970

第二步:按场景筛选数据

场景1:筛选所有DayofWeek=4的数据

直接用布尔索引就能完成筛选:

filtered_scenario1 = df[df['DayofWeek'] == 4]

场景2:筛选Year=2017且DayofWeek=4的数据

组合多个条件时,记得用括号包裹每个条件,用&表示逻辑与:

filtered_scenario2 = df[(df['Year'] == 2017) & (df['DayofWeek'] == 4)]

补充:用pd.json_normalize简化扁平化步骤

如果你觉得手动遍历太繁琐,也可以用pd.json_normalize直接处理,只需先把所有年份的列表合并成一个大列表:

all_entries = []
for entries in data.values():
    all_entries.extend(entries)
df = pd.json_normalize(all_entries)

得到的DataFrame和手动遍历的结果完全一致,后续筛选逻辑也相同。

内容的提问来源于stack exchange,提问作者niran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:00:55