2017-02-07 2 views
0

Я использую pandas для записи данных в файл excel. Я хочу сбросить данные, как в одном листе, а во втором листе я хочу его отсортировать. Слои - это ключ, а веса - значения в словаре.Сортировка записей из словаря в excel с использованием python Pandas

, например. sheet1 должен иметь таблицу, как показано ниже (несортированный):

Unsorted entries

и sheet2 должны отсортировали записи:

enter image description here

Я уже пытался OrderedDict

df1 = pd.DataFrame.from_dict(dict_weights, orient="index") 
    df1.columns = ['weights'] 

    df2 = pd.DataFrame.from_dict(collections.OrderedDict(dict_weights), orient="index") 
    df2.columns = ['weights'] 
    df1.to_excel(writer, sheet_name='sheet1') 
    df2.to_excel(writer, sheet_name='sheet2', startcol=3) 

    writer = pd.ExcelWriter(filename, engine='xlsxwriter') 
    writer.save() 

Проблема заключается в том он выполняет сортировку, но на обоих листах. Я просто хочу, чтобы данные были отсортированы в листах2, а на листе 1 они оставались несортированными.

Ожидаемые результаты в:

Лист1

Layer; weights 
T1_max_pool; 4 
activation_9; 1 
sum_9; 3 
Merge_2; 4 
activation_2; 1 
T2_max_pool; 4 

Sheet2

Layer; weights 
activation_2; 1 
activation_9; 1 
Merge_2; 4 
sum_9; 3 
T1_max_pool; 4 
T2_max_pool; 4 

Любые предложения ?? :) Благодаря!

+0

Всегда помогает копировать данные в вопрос вместо изображений. – Zero

+0

Спасибо за предложение! Я обновил вопрос; разделенные значения – blackbug

+0

'OrderedDict' просто запоминает порядок вставки, однако он не сортируется (по крайней мере, не интуитивно). Сначала вы можете создать 'OrderedDict', а затем вставить элементы один за другим отсортированным способом. То есть вместо 'OrderedDict (dict_weights)' вы можете сделать 'sorted_dict = OrderedDict(); для ключа в отсортированном (dict_weights): sorted_dict [key] = dict_weights [key] '. –

ответ

2

IIUIC, вы должны использовать sort_values на колонке Layers.

In [503]: writer = pd.ExcelWriter('file.xlsx') 

In [504]: df.to_excel(writer, 'sheet1') 

In [505]: df.sort_values(by='Layers', ascending=True).to_excel(writer, 'sheet2') 

In [506]: writer.save() 

Если вы не хотите индекс, используйте index=False во время записи, чтобы преуспеть.

+0

У меня есть обновление и запрос на предлагаемое решение. Он выполняет сортировку, но вывод немного отличается от ожидаемого: 'T1_max_pool | T2_max_pool | activation_2 | activ_9 | merge_2 | sum_9'. Возможно ли, что он должен что-то сделать с Капиталом и маленькими алфавитами? – blackbug

1

Изменения ДИКТ в списки и использование:

df1 = pd.DataFrame({'weights': list2}, index=list1) 
df2 = df1.sort_index() 

Dict имеет свою собственную логику для сортировки ключей и если вы хотите print его, вы увидите, что не печатаются, как вы ожидаете.

Смежные вопросы