我正在從事一個專案,我從 GraphQL API 獲取 JSON 資料。收到資料后,我對資料使用 json.loads() ,然后訪問我需要的部分 JSON,然后將其存盤在包含另一個字典的字典中。字典是:
{'placement': 1, 'entrant': {'id': 8554498, 'name': 'Test'}}
{'placement': 2, 'entrant': {'id': 8559863, 'name': 'Test'}}
{'placement': 3, 'entrant': {'id': 8561463, 'name': 'Test'}}
{'placement': 4, 'entrant': {'id': 8559889, 'name': 'Test'}}
{'placement': 5, 'entrant': {'id': 8561608, 'name': 'Test'}}
{'placement': 5, 'entrant': {'id': 8560090, 'name': 'Test'}}
{'placement': 7, 'entrant': {'id': 8561639, 'name': 'Test'}}
{'placement': 7, 'entrant': {'id': 8561822, 'name': 'Test'}}
{'placement': 9, 'entrant': {'id': 8559993, 'name': 'Test'}}
{'placement': 9, 'entrant': {'id': 8561572, 'name': 'Test'}}
我怎樣才能創建一個 Pandas 資料框,以便列是
placement | id | name
這些列下面的值是字典中與它們關聯的值嗎?如果我只使用
pd.DataFrame()
輸出不符合預期,所以我試圖查找涉及我迭代字典中專案的解決方案,但我沒有成功。任何幫助,將不勝感激。謝謝你。
uj5u.com熱心網友回復:
您需要為熊貓創建適當的字典來創建資料框。我在這里假設您有一個稱為字典的字典串列。
pd.DataFrame(
[
{"placement": d["placement"], "id": d["entrant"]["id"], "name": d["entrant"]["name"]}
for d in dictionaries
]
)
uj5u.com熱心網友回復:
我會做這樣的事情,也許不是最優雅的解決方案,但它有效。我假設您有每個字典的串列,因為您將字典一一按比例分配
dList = [{'placement': 1, 'entrant': {'id': 8554498, 'name': 'Test'}},
{'placement': 2, 'entrant': {'id': 8559863, 'name': 'Test'}},
{'placement': 3, 'entrant': {'id': 8561463, 'name': 'Test'}},
{'placement': 4, 'entrant': {'id': 8559889, 'name': 'Test'}},
{'placement': 5, 'entrant': {'id': 8561608, 'name': 'Test'}},
{'placement': 5, 'entrant': {'id': 8560090, 'name': 'Test'}},
{'placement': 7, 'entrant': {'id': 8561639, 'name': 'Test'}},
{'placement': 7, 'entrant': {'id': 8561822, 'name': 'Test'}},
{'placement': 9, 'entrant': {'id': 8559993, 'name': 'Test'}},
{'placement': 9, 'entrant': {'id': 8561572, 'name': 'Test'}}]
#generate column Names I supose that you dont have writed this names to make more general the problem
d0 = dList[0]
columns = []
for key,val in d0.items():
if not isinstance(val,dict):
columns.append(key)
else:
for subkey,subval in val.items():
columns.append(subkey)
#%% Here we are going to generate de data list (a list with a sublist for every dict
data = []
for d in dList:
thisData = []
for key,val in d.items():
if not isinstance(val,dict):
thisData.append(val)
else:
for subkey,subval in val.items():
thisData.append(subval)
data.append(thisData)
df = pd.DataFrame(data,columns=columns)
希望它對你有用,如果不是讓我知道
uj5u.com熱心網友回復:
這是通過從第一個 DataFrame 內部提取新 DataFrame 并合并它來實作的一種方法:
from itertools import chain
import pandas as pd
data = [
[{"placement": 1, "entrant": {"id": 8554498, "name": "Test"}}],
[{"placement": 2, "entrant": {"id": 8559863, "name": "Test"}}],
[{"placement": 3, "entrant": {"id": 8561463, "name": "Test"}}],
[{"placement": 4, "entrant": {"id": 8559889, "name": "Test"}}],
[{"placement": 5, "entrant": {"id": 8561608, "name": "Test"}}],
[{"placement": 5, "entrant": {"id": 8560090, "name": "Test"}}],
[{"placement": 7, "entrant": {"id": 8561639, "name": "Test"}}],
[{"placement": 7, "entrant": {"id": 8561822, "name": "Test"}}],
[{"placement": 9, "entrant": {"id": 8559993, "name": "Test"}}],
[{"placement": 9, "entrant": {"id": 8561572, "name": "Test"}}],
]
df = pd.DataFrame.from_dict(chain(*data))
result_df = pd.merge_asof(
df.loc[:, df.columns != "entrant"], # Get df without the "entrant" column
df["entrant"].apply(pd.Series), left_index=True, right_index=True
)
結果如下:
placement id name
0 1 8554498 Test
1 2 8559863 Test
2 3 8561463 Test
3 4 8559889 Test
4 5 8561608 Test
5 5 8560090 Test
6 7 8561639 Test
7 7 8561822 Test
8 9 8559993 Test
9 9 8561572 Test
uj5u.com熱心網友回復:
由于 json.loads() 提供資料的方式,您無法遍歷 df_data1 捕獲所有字典。為了根據需要修復字典的結構,我建議您執行以下操作,通過將出現的任何"}{"替換為"}, {",并用"["and將其括起來,從而在字典之間添加逗號"]"。假設j您的 json 字串,然后:
df_data1 = json.loads("[" j.replace("}{", "}, {") "]")
現在你的 df_data1 應該是這樣的:
[{'placement': 1, 'entrant': {'id': 8554498, 'name': 'Test'}},
{'placement': 2, 'entrant': {'id': 8559863, 'name': 'Test'}},
{'placement': 3, 'entrant': {'id': 8561463, 'name': 'Test'}},
{'placement': 4, 'entrant': {'id': 8559889, 'name': 'Test'}},
{'placement': 5, 'entrant': {'id': 8561608, 'name': 'Test'}},
{'placement': 5, 'entrant': {'id': 8560090, 'name': 'Test'}},
{'placement': 7, 'entrant': {'id': 8561639, 'name': 'Test'}},
{'placement': 7, 'entrant': {'id': 8561822, 'name': 'Test'}},
{'placement': 9, 'entrant': {'id': 8559993, 'name': 'Test'}},
{'placement': 9, 'entrant': {'id': 8561572, 'name': 'Test'}}]
現在您可以使用@Thomas Q 解決方案:
df= pd.DataFrame([
{"placement": d["placement"], "id": d["entrant"]["id"], "name": d["entrant"]["name"]}
for d in df_data1
])
df
placement id name
0 1 8554498 Test
1 2 8559863 Test
2 3 8561463 Test
3 4 8559889 Test
4 5 8561608 Test
5 5 8560090 Test
6 7 8561639 Test
7 7 8561822 Test
8 9 8559993 Test
9 9 8561572 Test
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/330465.html
上一篇:由0開始在碼云上搭建遠程倉庫托管eclipse本地代碼
下一篇:串列中的幾個字典到資料框的列
