2017-02-07 47 views
0

我正在使用熊猫将数据写入excel文件。我想将数据原样转储到一张表中,并在第二张表中按照分类的方式存储数据。图层是关键,权重是字典中的值。使用python将词典中的词条排序为excel熊猫

例如, 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() 

的问题是它在两张纸上进行分类。我只是希望数据在sheet2和sheet1中排序,它应该保持未排序。

预期在输出:

Sheet 1中

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

Sheet 2中

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,您需要在Layers列上使用sort_values列。

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() 

如果您不想索引,请在写入excel时使用index=False

+0

我对建议的解决方案进行了更新和查询。它执行排序,但输出与预期有点不同:'T1_max_pool | T2_max_pool | activation_2 | activation_9 | merge_2 | sum_9'。它有可能需要用Capital和小字母做些什么吗? – blackbug

1

更改词典到列表和用途:

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

Dict都有自己的排序按键的逻辑,如果你是print它,你会看到,你希望它不打印它。