[英]Convert list of identical dictionaries to Dataframe
我有一個這樣的清單:
[{'FirstOfficer': '1'}, {'SecondOfficer': '2'}, {'ThirdOfficer': '3'},{'FirstOfficer': '4'}, {'SecondOfficer': '5'}, {'ThirdOfficer': '6'},{'FirstOfficer': '7'}, {'SecondOfficer': '8'}, {'ThirdOfficer': '9'},{'FirstOfficer': '10'}, {'SecondOfficer': '11'}, {'ThirdOfficer': '12'}]
我想將其轉換為數據框,但是我得到了這樣的數據框:
FirstOfficer SecondOfficer ThirdOfficer
0 1 NaN NaN
1 NaN 2 NaN
2 NaN NaN 3
3 4 NaN NaN
4 NaN 5 NaN
5 NaN NaN 6
6 7 NaN NaN
7 NaN 8 NaN
8 NaN NaN 9
9 10 NaN NaN
10 NaN 11 NaN
11 NaN NaN 12
列名稱可以是任何名稱,因此我無法對其進行硬編碼。
預期的數據幀是:
FirstOfficer SecondOfficer ThirdOfficer
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
有人可以建議我解決方案嗎?
任何幫助,將不勝感激。
使用defaultdict
來存儲值,以按字典鍵列出:
from collections import defaultdict
d = defaultdict(list)
for x in L:
a, b = tuple(x.items())[0]
d[a].append(b)
print (d)
df = pd.DataFrame(d)
print (df)
FirstOfficer SecondOfficer ThirdOfficer
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
如果性能不是問題,則可以使用:
df=pd.DataFrame(l).apply(lambda x: pd.Series(x.dropna().values))
print(df)
FirstOfficer SecondOfficer ThirdOfficer
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
d = [{'FirstOfficer': '1'}, {'SecondOfficer': '2'}, {'ThirdOfficer': '3'}, {'FirstOfficer': '4'}, {'SecondOfficer': '5'}, {'ThirdOfficer': '6'}, {'FirstOfficer': '7'}, {'SecondOfficer': '8'}, {'ThirdOfficer': '9'}, {'FirstOfficer': '10'}, {'SecondOfficer': '11'}, {'ThirdOfficer': '12'}]
keys = list(set([str(i.keys()).split("'")[1] for i in d]))
final_dict = dict()
for key in keys:
final_dict['key'] = [i[key] for i in d if key in i.keys()]
df = pd.DataFrame.from_dict(final_dict)
OUTPUT:
FirstOfficer SecondOfficer ThirdOfficer
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
一種方法是預處理您的列表
例如:
import pandas as pd
lst = [{'FirstOfficer': '1'}, {'SecondOfficer': '2'}, {'ThirdOfficer': '3'},{'FirstOfficer': '4'}, {'SecondOfficer': '5'}, {'ThirdOfficer': '6'},{'FirstOfficer': '7'}, {'SecondOfficer': '8'}, {'ThirdOfficer': '9'},{'FirstOfficer': '10'}, {'SecondOfficer': '11'}, {'ThirdOfficer': '12'}]
data = []
for i in range(0, len(lst), 3):
temp = []
for d in lst[i:i+3]:
for _, v in d.items():
temp.append(v)
data.append(temp)
df = pd.DataFrame(data, columns=["FirstOfficer", "SecondOfficer", "ThirdOfficer"])
print(df)
輸出:
FirstOfficer SecondOfficer ThirdOfficer
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.