我的資料(多個字典)要處理并從中創建資料框有一點問題。
這是資料的樣子:
print(data)
0 {'john': True}
1 {'joe': True}
2 {'tom': True}
3 {'mark': False}
4 {'andrew': True}
...
93 {'david': False}
94 {'luke': False}
95 {'vincent': True}
96 {'oliver': True}
97 {'matthew': True}
Length: 98, dtype: object
基本上我想要的是這樣的:
df = pd.DataFrame()
df['name'] = data[0].keys()
df['result'] = data[0].values()
print(df)
name result
0 john True
所以 1 個資料框有 2 列 - 名稱和結果。
如何將該程序應用于所有字典data
并在同一個資料框中有 1 個輸出?我無法通過 lambda 函式復制該操作,但也許我做得不對。
uj5u.com熱心網友回復:
pd.DataFrame(data.apply(lambda x: list(x.items())[0]).values.tolist())
您可以重命名列,使用:
df.rename(columns={0: 'name', 1: 'result'}, inplace=True)
你想要什么?a dataframe
with 2 column
s,所以我們可以找到一個想法...我們知道這pd.DataFrame
是一個建構式,它獲取data
并將其轉換為dataframe
,如果data
是 2d 形式,如 2d 串列或 2d numpy 陣列或其他東西將被轉換為 a dataframe
with 2列。
好的,現在,我們有了想法……那么,讓我們開始吧……并將資料轉換為 2d 形式
嗯..哦...中的每個單元格data series
都是 adictionary
并且 python 提供了一個內置方法將其轉換為 2d 形式items
::
data.apply(lambda x: x.items())
輸出:
0 ((john, True))
1 ((joe, True))
2 ((tom, True))
3 ((mark, False))
...
哇,這很好......但是,等等......我們只需要(john, True)
,括號是無用的,并且items
將它添加為dictionary
多個key-value
像:{'john': True, 'jane': False, 'joe': True}
......
但是,在那里,我們只有一個,必須洗掉它...我的意思是只選擇第一個元素:((john, True))
...不幸的是...專案輸出不允許我們選擇第一個元素,所以,我們將其轉換為list
然后選擇第一個元素:
data.apply(lambda x: list(x.items())[0])
輸出:
0 (john, True)
1 (joe, True)
2 (tom, True)
哦..它在每個單元格中都是 1d,總共是 2d(系列本身就是一個維度)
如果你給一個系列pd.DataFrame
沒有任何改變......它再次給你......所以,你必須將它改為list
......
pandas
有一個內置屬性:values
給你什么使那個dataframe
或series
作為一個numpy array
,你可以把它給別人,他\她dataframe
又從那個...
你注意到了嗎?同樣,您必須將其轉換為2d list
. 這array
本身就是 2d,所以只需將其轉換為list
: .tolist()
:
data.apply(lambda x: list(x.items())[0]).values.tolist()
輸出:
[('john', True),
('joe', True),
('tom', True),
('mark', False),
('andrew', True),
...]
哦...一個漂亮、干凈和二維的串列...傳遞給pd.DataFrame
... :))
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469288.html
下一篇:從具有實際值的嵌套字典中生成對