[英]how to flattening nested json to dataframe pandas
如何像這樣將 JSON 展平為 pd.dataframe :
class_id|id |schedule_id |schedule_date |lesson_price |status`
1 | 3 | 1 | 2017-07-11 | USD 25 | ONGOING
1 | 3 | 2 | 2016-09-24 | USD 15 | OPEN REGISTRATION
1 | 4 | 1 | 2016-12-17 | USD 19 | ONGOING
1 | 4 | 2 | 2015-11-12 | USD 29 | ONGOING
1 | 4 | 3 | 2015-11-10 | USD 14 | ON SCHEDULE
2 | 1 | 1 | 2017-05-21 | USD 50 | CANCELLED
2 | 2 | 1 | 2017-06-04 | USD10 | FINISHED
2 | 2 | 2 | 2018-03-01 | USD12 | CLOSED
從JSON
我已經嘗試過這個參考,但我給了我 2 行 groupby class_id
如何顯示課程 object 中的 class_id 和 id 的所有數據計划,如所需的 dataframe?
你的數據結構的困難來自於
{
"lesson3": {
"id": 3,
"schedule": [
{
"schedule_id": "1",
"schedule_date": "2017-07-11",
"lesson_price": "USD 25",
"status": "ONGOING"
},
{
"schedule_id": "2",
"schedule_date": "2016-09-24",
"lesson_price": "USD 15",
"status": "OPEN REGISTRATION"
}
]
}
}
最好有
{
"name": "lesson3",
"id": 3,
"schedule": [
{
"schedule_id": "1",
"schedule_date": "2017-07-11",
"lesson_price": "USD 25",
"status": "ONGOING"
},
{
"schedule_id": "2",
"schedule_date": "2016-09-24",
"lesson_price": "USD 15",
"status": "OPEN REGISTRATION"
}
]
}
但我們無法控制大部分時間獲得的數據。 所以我們必須去掉第1課,第2課的鑰匙,把object向上移動。
import requests
data = requests.get(url).json()
提取不同的教訓
data_ = [{'class_id': c['class_id'], 'lessons': v} for c in data['class'] for d, v in c['data'].items()]
現在的數據是這樣的
[
{
"class_id": "1",
"lessons": {
"id": 3,
"schedule": [
{
"schedule_id": "1",
"schedule_date": "2017-07-11",
"lesson_price": "USD 25",
"status": "ONGOING"
},
{
"schedule_id": "2",
"schedule_date": "2016-09-24",
"lesson_price": "USD 15",
"status": "OPEN REGISTRATION"
}
]
}
},
...
]
現在我們可以使用 json_normalize 將其讀入 pandas json_normalize
df = json_normalize(data_, record_path=['lessons', 'schedule'], meta=['class_id', ['lessons', 'id']])
schedule_id schedule_date lesson_price status class_id lessons.id
0 1 2017-07-11 USD 25 ONGOING 1 3
1 2 2016-09-24 USD 15 OPEN REGISTRATION 1 3
2 1 2016-12-17 USD 19 ONGOING 1 4
3 2 2015-11-12 USD 29 ONGOING 1 4
4 3 2015-11-10 USD 14 ON SCHEDULE 1 4
5 1 2017-05-21 USD 50 CANCELLED 2 1
6 1 2017-06-04 USD10 FINISHED 2 2
7 5 2018-03-01 USD12 CLOSED 2 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.