[英]pandas DF out of list of dictionaries with index = keys
我想將字典列表傳遞給 dataframe:
mylist_of_dicts= [{'H1': 2},
{'H2': 2},
{'H3': 3},
{'H4': 2},
{'H5': 2},
{'B6': 2},
{'H7': 2},
{'H8': 2}]
cl_ocurrences = pd.DataFrame(mylist)
print(cl_ocurrences.head(2))
cl_ocurrences = pd.DataFrame.from_dict(mylist)
print(cl_ocurrences.head(2))
cl_ocurrences = pd.DataFrame.from_records(mylist)
print(cl_ocurrences.head(2))
但我希望鍵出現在列中,值出現在另一列中。
我可以玩弄列表推導並將兩個列表(值和鍵)傳遞給 DF 構造函數,但應該有更好的方法。
我不確定 Pandas 中是否有明確的 function 來解開您想要的格式的字典列表。
這結合了reduce
和字典的新 union 方法(我認為它在 python 3.9 中生效):
from functools import reduce
merged_dict = reduce(lambda x, y: x|y, mylist)
(pd.DataFrame.from_dict(merged_dict,
orient = 'index',
columns = ['value'])
.rename_axis('H')
.reset_index()
)
H value
0 H1 2
1 H2 2
2 H3 3
3 H4 2
4 H5 2
5 B6 2
6 H7 2
7 H8 2
對於小於 3.9 的 python 版本,解包也可以正常工作:
merged_dict = reduce(lambda x, y: {**x, **y}, mylist)
您還可以使用itertools
和map
的組合:
pd.DataFrame(chain.from_iterable(map(lambda x: x.items(), mylist)),
columns = ['H', 'value'])
如果您的個人 dicts 有一個固定的結構(例如 {'H':value} 對於所有這些,那么我會重新定義個人 dicts 以使它們具有相同的標簽:
extended_list = [{'name': next(iter(x)), 'value': x[next(iter(x))]} for x in mylist]
cl_ocurrences = pd.DataFrame.from_dict(extended_list)
print(cl_ocurrences.head())
這導致
name value
0 H1 2
1 H2 2
2 H3 3
3 H4 2
4 H5 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.