Poszukuje szybkiego sposobu na dodanie wiersza w ramce danych pandy do uporządkowanego dict bez użycia listy. Lista jest w porządku, ale z dużymi zbiorami danych może potrwać długo. Używam czytnika Fiona GIS, a wiersze są uporządkowane z schematem podającym typ danych. Używam pand do łączenia danych. W wielu przypadkach wiersze będą miały różne typy, więc pomyślałem zamienienie w tablicę numpy z ciągiem znaków, która może załatwić sprawę.Jak zamienić wiersz danych pandy na uporządkowany dokument Szybki
10
A
Odpowiedz
16
Niestety nie można po prostu zrobić zastosowania (ponieważ wpisuje się go z powrotem do 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
Ale można użyć wyrażeń listowych z iterrows:
In [5]: [OrderedDict(row) for i, row in df.iterrows()]
Out[5]: [OrderedDict([('a', 1), ('b', 2)]), OrderedDict([('a', 3), ('b', 4)])]
jeśli to można użyć generatora, a nie listy, do tego, z czym pracowałeś, zwykle będzie bardziej wydajny:
In [6]: (OrderedDict(row) for i, row in df.iterrows())
Out[6]: <generator object <genexpr> at 0x10466da50>
4
ten jest realizowany w pandas 0.21.0+
w funkcji to_dict
parametrem 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)]))])