簡體   English   中英

如何快速將pandas數據幀行轉換為ordereddict

[英]How to turn pandas dataframe row into ordereddict fast

尋找一種快速的方法,將pandas數據幀中的一行放入一個有序的dict中,而不使用list。 列表很好,但是大數據集需要很長時間。 我正在使用fiona GIS閱讀器,並且行是有序的,並且模式給出了數據類型。 我用pandas來加入數據。 在很多情況下,行將具有不同的類型,所以我在考慮變成一個帶有字符串類型的numpy數組可能會成功。

不幸的是,你不能只是做一個申請(因為它適合它回到DataFrame):

In [1]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])

In [2]: df
Out[2]: 
   a  b
0  1  2
1  3  4

In [3]: from collections import OrderedDict

In [4]: df.apply(OrderedDict)
Out[4]: 
   a  b
0  1  2
1  3  4

但你可以使用iterrows的列表理解:

In [5]: [OrderedDict(row) for i, row in df.iterrows()]
Out[5]: [OrderedDict([('a', 1), ('b', 2)]), OrderedDict([('a', 3), ('b', 4)])]

如果可以使用生成器而不是列表,那么通常會更有效:

In [6]: (OrderedDict(row) for i, row in df.iterrows())
Out[6]: <generator object <genexpr> at 0x10466da50>

這在函數to_dict中的pandas 0.21.0+to_dict ,參數into

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])
print (df)
   a  b
0  1  2
1  3  4

d = df.to_dict(into=OrderedDict, orient='index')
print (d)
OrderedDict([(0, OrderedDict([('a', 1), ('b', 2)])), (1, OrderedDict([('a', 3), ('b', 4)]))])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM