我需要回圈不同字典的值并從中創建一個資料框。
資料來自輸出 json 的 api,如下所示
源字典
result = {
"meta": {
"request": {
"segment_name": "Searches1",
"metrics": ["Visits"]
},
"status": "Success"
},
"segments": [
{"date": "2021-11-01", "visits": 100, "confidence": "High"},
{"date": "2021-11-02", "visits": 200, "confidence": "High"},
{"date": "2021-11-03", "visits": 300, "confidence": "Low"},
{"date": "2021-11-04", "visits": 400, "confidence": "High"},
{"date": "2021-11-05", "visits": 500, "confidence": "Low"},
]
},
{
"meta": {
"request": {
"segment_name": "Searches2",
"metrics": ["Visits"]
},
"status": "Success"
},
"segments": [
{"date": "2021-11-01", "visits": 110, "confidence": "High"},
{"date": "2021-11-02", "visits": 220, "confidence": "High"},
{"date": "2021-11-03", "visits": 330, "confidence": "Low"},
{"date": "2021-11-04", "visits": 440, "confidence": "High"},
{"date": "2021-11-05", "visits": 540, "confidence": "Low"},
]
}
我嘗試了以下方法,我只是回圈“segments”-dictionairy,但這顯然不起作用。
我的方法
def getSearches():
Searches = []
segment_name = result['meta']['request']['segment_name']
if "segments" in result:
for fs in result['segments']:
Searches.append(
{"date": fs['date'], "segment_name": segment_name, "visits": fs['visits'], "confidence": fs['confidence']})
fs_df = pd.DataFrame(Searches)
print(fs_df)
getSearches()
我收到以下錯誤訊息
錯誤資訊
Traceback (most recent call last):
File "/Users/ismail/Desktop/sw_dict_test", line 51, in <module>
getFlightSearches()
File "/Users/ismail/Desktop/sw_dict_test", line 40, in getFlightSearches
segment_name = result['meta']['request']['segment_name']
TypeError: tuple indices must be integers or slices, not str
確切地說,我需要從“request”字典中訪問“segment_name”以及“segments”字典中的所有變數,并將它們附加到熊貓表中。
期望的輸出
date segment_name visits confidence
0 2021-11-01 Searches1 100 High
1 2021-11-02 Searches1 200 High
2 2021-11-03 Searches1 300 Low
3 2021-11-04 Searches1 400 High
4 2021-11-05 Searches1 500 Low
5 2021-11-01 Searches2 110 High
6 2021-11-02 Searches2 220 High
7 2021-11-03 Searches2 330 Low
8 2021-11-04 Searches2 440 High
9 2021-11-05 Searches2 550 Low
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您還可以使用json_normalize扁平化 JSON 資料。由于記錄串列,即您需要轉換為行的字典存盤在“段”中,因此設定record_path='segments'。您只使用“segment_name”作為每條記錄的元資料,因此您將其路徑設定為串列:meta=[['meta', 'request', 'segment_name']]。
然后用于rename更改列名并reindex以正確的順序獲取列。
df = pd.json_normalize(result, 'segments', [['meta', 'request', 'segment_name']]).rename({'meta.request.segment_name':'segment_name'}, axis=1).reindex(['date', 'segment_name', 'visits', 'confidence'], axis=1)
輸出:
date segment_name visits confidence
0 2021-11-01 Searches1 100 High
1 2021-11-02 Searches1 200 High
2 2021-11-03 Searches1 300 Low
3 2021-11-04 Searches1 400 High
4 2021-11-05 Searches1 500 Low
5 2021-11-01 Searches2 110 High
6 2021-11-02 Searches2 220 High
7 2021-11-03 Searches2 330 Low
8 2021-11-04 Searches2 440 High
9 2021-11-05 Searches2 540 Low
uj5u.com熱心網友回復:
result是一個元組,因此錯誤。改為將其設為串列并遍歷每個元素。
result = [{
"meta": {
"request": {
"segment_name": "Searches1",
"metrics": ["Visits"]
},
"status": "Success"
},
"segments": [
{"date": "2021-11-01", "visits": 100, "confidence": "High"},
{"date": "2021-11-02", "visits": 200, "confidence": "High"},
{"date": "2021-11-03", "visits": 300, "confidence": "Low"},
{"date": "2021-11-04", "visits": 400, "confidence": "High"},
{"date": "2021-11-05", "visits": 500, "confidence": "Low"},
]
},
{
"meta": {
"request": {
"segment_name": "Searches2",
"metrics": ["Visits"]
},
"status": "Success"
},
"segments": [
{"date": "2021-11-01", "visits": 110, "confidence": "High"},
{"date": "2021-11-02", "visits": 220, "confidence": "High"},
{"date": "2021-11-03", "visits": 330, "confidence": "Low"},
{"date": "2021-11-04", "visits": 440, "confidence": "High"},
{"date": "2021-11-05", "visits": 540, "confidence": "Low"},
]
}]
def getSearches(result):
Searches = []
segment_name = result['meta']['request']['segment_name']
if "segments" in result:
for fs in result['segments']:
Searches.append(
{"date": fs['date'], "segment_name": segment_name, "visits": fs['visits'], "confidence": fs['confidence']})
return Searches
searches = []
for r in result:
searches = getSearches(r)
pd.DataFrame(searches)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414642.html
標籤:
上一篇:在串列中搜索包含字符的單詞
