我有这样的JSON格式
{
"2015": [
{
"DayofWeek": 4,
"Date": "2015-02-06 00:00:00",
"Year": 2015,
"y": 43.2,
"x": 10.397
}
],
"2016": [
{
"DayofWeek": 4,
"Date": "2016-02-06 00:00:00",
"Year": 2016,
"y": 43.2,
"x": 10.397,
"Minute": 0
}
],
"2017": [
{
"DayofWeek": 4,
"Date": "2017-02-06 00:00:00",
"Year": 2017,
"y": 43.2,
"x": 10.397,
"Minute": 0
}
]
}
字符串
我是这样阅读JSON文件的,读完JSON文件后;将其转换为数据框
with open('sample.json') as json_data:
data = json.load(json_data)
df=pd.DataFrame([data])
型
现在,我想过滤数据的基础上,如DayofWeek和Year等输入键值。
示例:
案例1:
如果输入值为DayofWeek=4,那么我希望过滤DayofWeek=4所有对象。
案例二:
如果输入值同时为DayofWeek=4和year=2017,那么我想过滤所有来自DayofWeek=4的json的2017年数据。
我试过这个代码,但它不工作
filteredVal=df['2017']
filter_v={'2015':{'DayofYear':4}}
pd.Series(filter_v)
型
3条答案
按热度按时间zdwk9cvp1#
问题是,你的json-values包含了带有dicts的列表:
字符串
...Pandas不能处理这个(据我所知)。
但是如果每个列表只包含一个元素,你可以转换它:
型
现在你可以用
index
的方向做一个DataFrame
:型
x1c 0d1x的数据
并访问您的元素:
案例一:
型
案例二:
型
的
编辑
如果列表中有多个元素,则可以创建一个包含所有条目的列表:
型
因为你有一个
Year
列,你可能甚至不需要json-/dict-key,所以我跳过了它。:—)c2e8gylq2#
你可以像这样使用列表解析:
字符串
这将给予你一个字典条目列表。如果你想要一个过滤字典(转换为DataFrame),你可以做类似这样的事情:
型
ohtdti5x3#
你拥有的数据并不一致,但显然pandas可以处理这个问题。
pandas.json_normalize
可以使用字典中的嵌套列表(另见record_path
参数),pandas.concat
可以有效地将单独的DataFrame连接在一起:字符串