使用python将字典中的条目排序到excel

使用python将字典中的条目排序到excel,python,excel,pandas,Python,Excel,Pandas,我正在使用pandas将数据写入excel文件。我想转储数据,因为它是在一个工作表和在第二个工作表中,我希望它在排序的方式。图层是关键,权重是字典中的值 例如,表1应具有下表(未排序): 和sheet2应具有已排序的条目: 我已经试过了 df1 = pd.DataFrame.from_dict(dict_weights, orient="index") df1.columns = ['weights'] df2 = pd.DataFrame.from_dict(co

我正在使用pandas将数据写入excel文件。我想转储数据,因为它是在一个工作表和在第二个工作表中,我希望它在排序的方式。图层是关键,权重是字典中的值

例如,表1应具有下表(未排序):

和sheet2应具有已排序的条目:

我已经试过了

    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中,数据应该保持未排序状态

中的预期输出:

表1

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

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

有什么建议吗??)谢谢

IIUIC,您需要在
列上使用
排序值

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

IIUIC,您需要在
列上使用
排序值

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

将dict更改为列表并使用:

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

Dict
有自己的排序键逻辑,如果要打印它,您会看到它没有按预期打印。

将Dict更改为列表并使用:

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

Dict
有自己的排序键逻辑,如果您要打印它,您会看到它没有按预期打印。

在问题中使用可复制的数据而不是图像总是有帮助的。谢谢您的建议!我已经更新了问题;分隔值
OrderedDict
只记住插入顺序,但它没有排序(至少不是以直观的方式)。您可以先创建
OrderedDict
,然后以排序方式依次插入项目。也就是说,您可以执行
sorteddict=orderedict(),而不是
orderedict(dict\u weights)
;对于已排序的输入键(dict\u weights):已排序的输入键[key]=dict\u weights[key]
。在问题中使用可复制的数据而不是图像总是有帮助的。感谢您的建议!我已经更新了问题;分隔值
OrderedDict
只记住插入顺序,但它没有排序(至少不是以直观的方式)。您可以先创建
OrderedDict
,然后以排序方式依次插入项目。也就是说,您可以执行
sorteddict=orderedict(),而不是
orderedict(dict\u weights)
;对于已排序的输入键(dict\u weights):已排序的输入键[key]=dict\u weights[key]
。我对建议的解决方案进行了更新和查询。它进行排序,但输出与预期略有不同:
T1_max_pool | T2_max_pool | activation_2 | activation_9 | merge_2 | sum_9
。它是否可能与大写字母和小写字母有关?我对提议的解决方案有更新和疑问。它进行排序,但输出与预期略有不同:
T1_max_pool | T2_max_pool | activation_2 | activation_9 | merge_2 | sum_9
。它是否可能与大写字母和小字母有关?