Ищете быстрый способ получить строку в фрейме pandas в упорядоченном dict с использованием списка. Список хорош, но с большими наборами данных потребуется много времени. Я использую fiona GIS reader, а строки упорядочены с помощью схемы, дающей тип данных. Я использую pandas для объединения данных. Во многих случаях строки будут иметь разные типы, поэтому я думал, что превращение в массив numpy с типом строки может сделать трюк.
Как превратить строку <data> в строку pandas в orderdict fast
Ответ 1
К сожалению, вы не можете просто применить заявку (поскольку она подходит к 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>
Ответ 2
Это реализовано в 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)]))])