2017-04-13 174 views
3

我有一個看起來像一個數據幀:熊貓:轉換數據框欄與欄標題爲字典鍵和col值字典作爲字典值

 NAME    ID 
155 ARBITRARY_A 697381 
208 ARBITRARY_B 691820 
265 ARBITRARY_C 691782 
272 ARBITRARY_D 695593 

我想把它轉換成一個字典列表,看起來如:

[{name:ARBITRARY_A, id:697381}, {name:ARBITRARY_B, id:691820}, 
{name:ARBITRARY_C, id:691782}, {name:ARBITRARY_D, id:695593}] 

什麼是最快/最佳的方式來做這個操作?

+2

'df.to_dict('record')'? – johnchase

回答

4

正如評論指出,pandas.DataFrame.to_dict()可以使用。而在你的情況,你需要orientrecord

代碼:

df.to_dict('record') 

測試代碼:

df = pd.read_fwf(StringIO(u""" 
      NAME    ID 
    155 ARBITRARY_A 697381 
    208 ARBITRARY_B 691820 
    265 ARBITRARY_C 691782 
    272 ARBITRARY_D 695593"""), 
       header=1, index_col=0) 

print(df) 
print(df.to_dict('record')) 

結果:

  NAME  ID 
155 ARBITRARY_A 697381 
208 ARBITRARY_B 691820 
265 ARBITRARY_C 691782 
272 ARBITRARY_D 695593 

[{u'NAME': u'ARBITRARY_A', u'ID': 697381L}, {u'NAME': u'ARBITRARY_B', u'ID': 691820L}, {u'NAME': u'ARBITRARY_C', u'ID': 691782L}, {u'NAME': u'ARBITRARY_D', u'ID': 695593L}] 
+1

很好的答案!我特別喜歡你使用** bold **加上我的一個:-) – piRSquared

+0

所有的東西都比較好吃。 –

1

嘗試:

df.to_dict() 

如果這不會產生預期的結果嘗試調換數據框:

df.T.to_dict() 
3

您可以通過執行推導自己

v = df.values.tolist() 
c = df.columns.values.tolist() 

[dict(zip(c, x)) for x in v] 

[{'ID': 697381L, 'NAME': 'ARBITRARY_A'}, 
{'ID': 691820L, 'NAME': 'ARBITRARY_B'}, 
{'ID': 691782L, 'NAME': 'ARBITRARY_C'}, 
{'ID': 695593L, 'NAME': 'ARBITRARY_D'}] 

小給擠多一點表現出來的df
enter image description here

較大d1
enter image description here

+0

漂亮的顏色,但我們需要弄清楚如何做到這一點,而不是'png'。或者,也許從iPython複製並粘貼到SO標記應該是一件事情? –

+0

你可能剛剛激勵我想出更好的東西:-) – piRSquared

+0

@piRSquared我爲你另一個http://stackoverflow.com/questions/43504945/pandas-select-rows-based-on-multiple-object -values-inside-a-column :) – Fizi