2 回答

TA貢獻1805條經(jīng)驗 獲得超10個贊
您可以通過迭代對象來解壓嵌套的 json 對象。嘗試
import pandas as pd
a=[
{
"item": [
{
"value": 0,
"type": "a"
},
{
"value": 0,
"type": "b"
},
{
"value": 70,
"type": "c"
},
],
"timestamp": "2019-01-12T04:52:06.669Z"
},
{
"item": [
{
"value": 30,
"type": "a"
},
{
"value": 0,
"type": "b"
}
],
"timestamp": "2019-01-12T04:53:06.669z"
}
]
cols = ['value', 'type', 'timestamp']
rows = []
for data in a:
data_row = data['item']
timestamp = data['timestamp']
for row in data_row:
row['timestamp']=timestamp
rows.append(row)
df = pd.DataFrame(rows)
df =df.pivot_table(index='timestamp',columns=['type'],values=['value']).reset_index()
df.columns=['timestamp','a','b','c']
如果您正在尋找緊湊的解決方案,請使用json_normalize
from pandas.io.json import json_normalize
df =pd.DataFrame()
for i in range(len(a)):
df =pd.concat([df,json_normalize(a[i]['item'])])
df =df.pivot_table(index='timestamp',columns=['type'],values=['value']).reset_index()
df.columns=['timestamp','a','b','c']
最終輸出
timestamp a b c
2019-01-12T04:52:06.669Z 0.0 0.0 70.0
2019-01-12T04:53:06.669z 30.0 0.0 NaN

TA貢獻1827條經(jīng)驗 獲得超9個贊
您可以從 json 中提取字典列表并將其提供給數(shù)據(jù)幀。代碼可以是:
df = pd.DataFrame([dict([('timestamp', d['timestamp']), ('a', 0),
('b', 0), ('c', 0)]
+ [(item['type'], item['value'])
for item in d['item']])for d in data['data']],
columns=['timestamp', 'a', 'b', 'c'])
print(df)
按預(yù)期輸出:
timestamp a b c
0 2019-01-12T04:52:06.669Z 0 0 70
1 2019-01-12T04:53:06.669z 30 0 0
這里的技巧是首先構(gòu)建一個具有默認值的對列表,然后在從中構(gòu)建字典之前用實際值擴展它。由于保留了最后看到的值,您實際上構(gòu)建了一個包含所有相關(guān)值的字典。
columns 參數(shù)僅用于確保列的預(yù)期順序。
添加回答
舉報