2016-12-05 15 views
5

Jest to stanowisko, w którym ramka danych panda jest konwertowana do słownika w celu dalszego przetwarzania.Ramka danych pandy do zamówionego słownika

kod to zrobić:

df = pd.read_excel(open('data/file.xlsx', 'rb'), sheetname="Sheet1") 
dict = df.set_index('id').T.to_dict('dict') 

który daje coś takiego: {column -> {index -> value}}

Czy istnieje szybki sposób zamiast tego {column -> {index -> value}} uzyskać to: OrderedDict(column, value) jako wartość zwracana?

Obecnie używam słownika generowanego przez pandy i przypisuję te wartości do uporządkowanego słownika, jeden po drugim. Nie jest to optymalny sposób, ponieważ kolejność jest kodowany

Przykład wejściowe: Plik Excel tak:

Unique_id | column1 | column2 | column3 | column 4 
1   | 3  | 4  | 43  | 90 
2   | 54  | 6  | 43  | 54 

i produkcja powinna być uporządkowane słowniku tak:

{1:[3,4,43,90], 2:[54,6,43,54]} 
+0

co z indeksami? – MMF

+0

@MMF proszę wyjaśnić. – Pavlos

+0

'OrderedDict (kolumna, wartość)' nie uwzględnia indeksu. Nie chcesz tego zatrzymać? ? – MMF

Odpowiedz

4

Możesz uzyskać słownik w żądanej kolejności, używając OrderedDict z kluczami z kolumny Unique_id. Poniższe ilustracje powinny służyć jako ilustracja:

from collections import OrderedDict 

# Get the unordered dictionary 
unordered_dict = df.set_index('Unique_id').T.to_dict('list') 

# Then order it 
ordered_dict = OrderedDict((k,unordered_dict.get(k)) for k in df.Unique_id) 
# OrderedDict([(1, [3, 4, 43, 90]), (2, [54, 6, 43, 54])]) 

Dzięki!

Powiązane problemy