Python 如何使用具有相同列名的熊猫规范化JSON时间序列
我想使用具有以下格式的时间序列数据的api:Python 如何使用具有相同列名的熊猫规范化JSON时间序列,python,json,pandas,Python,Json,Pandas,我想使用具有以下格式的时间序列数据的api: ... "value":[ { "Key":"bt386", "ReferenceDate":"2019-07-27T00:00:00Z", "TargetDate":"2019-07-28T00:00:00Z", "PublicationDate":null, "ChangedOn":"2019-07-27T09:36:03.9727098+01:00", "ValidUntil":"9999-12- 31T23:59:59.9999999Z",
...
"value":[
{
"Key":"bt386",
"ReferenceDate":"2019-07-27T00:00:00Z",
"TargetDate":"2019-07-28T00:00:00Z",
"PublicationDate":null,
"ChangedOn":"2019-07-27T09:36:03.9727098+01:00",
"ValidUntil":"9999-12-
31T23:59:59.9999999Z",
"ValueColumnsNumber":[
{"Key":"FreshSnowDepth","Value":0.000000000},
{"Key":"Precipitation","Value":0.000000000},
{"Key":"RainSnowMelt","Value":0.000000000},
{"Key":"Runoff","Value":31.800000000},
{"Key":"SnowDepth","Value":0.000000000},
{"Key":"SnowDepthNormalPerc","Value":0.000000000},
{"Key":"SnowMelt","Value":0.000000000},
{"Key":"SnowWaterEquivalents","Value":0.000000000},
{"Key":"Temperature","Value":18.450000000}],"ValueColumnsText":
[],"ValueColumnsDateTime":[]},
{
"Key":"bt386",
"ReferenceDate":"2019-07-27T00:00:00Z",
"TargetDate":"2019-07-29T00:00:00Z",
"PublicationDate":null,
"ChangedOn":"2019-07-
27T09:36:03.9727098+01:00",
"ValidUntil":"9999-12-31T23:59:59.9999999Z",
"ValueColumnsNumber":[
{"Key":"FreshSnowDepth","Value":0.000000000},
{"Key":"Precipitation","Value":0.000000000},
{"Key":"RainSnowMelt","Value":0.000000000},
{"Key":"Runoff","Value":28.400000000},
{"Key":"SnowDepth","Value":0.000000000},
{"Key":"SnowDepthNormalPerc","Value":0.000000000},
{"Key":"SnowMelt","Value":0.000000000},
{"Key":"SnowWaterEquivalents","Value":0.000000000},
{"Key":"Temperature","Value":18.750000000}],
"ValueColumnsText":
[],
"ValueColumnsDateTime":[]
}
]
我尝试了以下代码:
d = json.loads(response.content)
timeSeries = json_normalize(data=d['value'],
record_path='ValueColumnsNumber',
meta=['ReferenceDate', 'TargetDate'])
table = timeSeries.pivot_table('Value', ['ReferenceDate', 'TargetDate'],
'Key')
table.reset_index(drop=False, inplace=True)
pd.set_option('display.max_columns', None)
print(table.head(3))
Key ReferenceDate TargetDate FreshSnowDepth
0 2017-03-22T00:00:00Z 2017-03-23T00:00:00Z 2.8
1 2017-03-22T00:00:00Z 2017-03-24T00:00:00Z 7.6
2 2017-03-22T00:00:00Z 2017-03-25T00:00:00Z 0.3
我需要的是还包括字母数字键
Key CurveKey ReferenceDate TargetDate FreshSnowDepth
0 bt386 2017-03-22T00:00:00Z 2017-03-23T00:00:00Z 2.8
1 bt386 2017-03-22T00:00:00Z 2017-03-24T00:00:00Z 7.6
2 abcde 2017-03-22T00:00:00Z 2017-03-25T00:00:00Z 0.3
timeSeries = json_normalize(data=d['value'],
record_path='ValueColumnsNumber',
meta=['Key', 'ReferenceDate', 'TargetDate'])
更改json\u normalize()
函数时,出现以下错误:
ValueError:元数据名称键冲突,需要区分前缀
要将json转换为所需的格式,我需要做什么?试试以下方法:
table = pd.io.json.json_normalize(d, ['value', 'ValueColumnsNumber'], meta=[
['value', 'Key'],
['value', 'ReferenceDate'],
['value', 'TargetDate'],
])
记录路径
应该是要循环的最深级别meta
包含您想要抓住的较浅层次的任何内容
结果:
Key Value value.Key value.ReferenceDate value.TargetDate
0 FreshSnowDepth 0.0 bt386 2019-07-27T00:00:00Z 2019-07-28T00:00:00Z
1 Precipitation 0.0 bt386 2019-07-27T00:00:00Z 2019-07-28T00:00:00Z
2 RainSnowMelt 0.0 bt386 2019-07-27T00:00:00Z 2019-07-28T00:00:00Z
3 Runoff 31.8 bt386 2019-07-27T00:00:00Z 2019-07-28T00:00:00Z
4 SnowDepth 0.0 bt386 2019-07-27T00:00:00Z 2019-07-28T00:00:00Z