18

寻找一种快速的方法,在不使用列表的情况下将 pandas 数据框中的一行转换为有序字典。列表很好,但大型数据集需要很长时间。我正在使用 fiona GIS 阅读器,并且行是有序字典,其模式提供数据类型。我使用熊猫来加入数据。在很多情况下,行会有不同的类型,所以我想变成一个字符串类型的 numpy 数组可能会成功。

4

2 回答 2

22

这是在带有参数pandas 0.21.0+的函数中实现的:to_dictinto

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)]))])
于 2017-11-21T07:49:51.893 回答
20

不幸的是,您不能只进行应用(因为它适合回到 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>
于 2013-09-25T05:31:28.347 回答