rol*_*and 5 python json pandas
我有一个 JSON 文件,如下所示:
{
"ALPHA": [
{
"date": "2021-06-22",
"constituents": {
"BBB": 0,
"EEE": 1,
"BTB": 1,
"YUY": 1
}
},
{
"date": "2021-09-07",
"constituents": {
"BBB": 0,
"EEE": 0,
"BTB": 0,
"YUY": 0
}
}
],
"BETA": [
{
"date": "2021-06-22",
"constituents": {
"BBB": 1,
"EEE": 1,
"BTB": 1,
"YUY": 1
}
},
{
"date": "2021-09-07",
"constituents": {
"BBB": 1,
"EEE": 1,
"BTB": 1,
"YUY": 1
}
}
],
"THETA": [
{
"date": "2021-06-22",
"constituents": {
"BBB": 0,
"EEE": 1,
"BTB": 1,
"YUY": 0
}
},
{
"date": "2021-08-20",
"constituents": {
"BBB": 0,
"EEE": 1,
"BTB": 1,
"YUY": 0
}
},
{
"date": "2021-09-07",
"constituents": {
"BBB": 0,
"EEE": 1,
"BTB": 1,
"YUY": 0
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想将上面的内容读入 pandas 数据帧,其中第一个索引是日期,第二个索引是第一个键(即“ALPHA”、“BETA”、“THETA”),列是内部键(即“ BBB" 、"EEE"、"BTB" 、"YUY"),单元格值是这些内部键的值。
如何将 JSON 文件中的内容读入 pandas 中?
您可以使用,作为索引,将元素作为列表,将JSONpd.Series导入到 Pandas 系列中。然后将 JSON 列表扩展为单个 JSON 。通过+将内部 JSON 展开为数据帧。ALPHABETA.explode().apply()pd.Series
附加date为索引 by .set_index()with append=True; 从第二个索引交换date到第一个索引.swaplevel()。
最后,取出该列,并通过+constituents进一步将内部 JSON 扩展为 dataframe ,如下所示:.apply()pd.Series
(假设您已经将 JSON 文件加载到j)
df = (pd.Series(j)
.explode()
.apply(pd.Series)
.set_index('date', append=True)
.swaplevel()['constituents']
.apply(pd.Series)
)
Run Code Online (Sandbox Code Playgroud)
数据输入:
j = {'ALPHA': [{'date': '2021-06-22',
'constituents': {'BBB': 0, 'EEE': 1, 'BTB': 1, 'YUY': 1}},
{'date': '2021-09-07',
'constituents': {'BBB': 0, 'EEE': 0, 'BTB': 0, 'YUY': 0}}],
'BETA': [{'date': '2021-06-22',
'constituents': {'BBB': 1, 'EEE': 1, 'BTB': 1, 'YUY': 1}},
{'date': '2021-09-07',
'constituents': {'BBB': 1, 'EEE': 1, 'BTB': 1, 'YUY': 1}}],
'THETA': [{'date': '2021-06-22',
'constituents': {'BBB': 0, 'EEE': 1, 'BTB': 1, 'YUY': 0}},
{'date': '2021-08-20',
'constituents': {'BBB': 0, 'EEE': 1, 'BTB': 1, 'YUY': 0}},
{'date': '2021-09-07',
'constituents': {'BBB': 0, 'EEE': 1, 'BTB': 1, 'YUY': 0}}]}
Run Code Online (Sandbox Code Playgroud)
输出
print(df)
BBB EEE BTB YUY
date
2021-06-22 ALPHA 0 1 1 1
2021-09-07 ALPHA 0 0 0 0
2021-06-22 BETA 1 1 1 1
2021-09-07 BETA 1 1 1 1
2021-06-22 THETA 0 1 1 0
2021-08-20 THETA 0 1 1 0
2021-09-07 THETA 0 1 1 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |