Python 数据帧未按列名排序

Python 数据帧未按列名排序,python,pandas,Python,Pandas,我有一本字典如下: entity_dict= {u'bam': 1.0, u'ham': 1.0, u'jam': 0.82390874094431876, u'kam': 1.0, u'lam': 1.0, u'mam': 0.82390874094431876, u'pam': 1.0, u'ram': 1.0, u'sam': 0.82390874094431876, u'tam': 1.0} 我试图将其转换为dataframe,我编写了以下代码并得到以下结果: ent

我有一本字典如下:

entity_dict=
{u'bam': 1.0,
 u'ham': 1.0,
 u'jam': 0.82390874094431876,
 u'kam': 1.0,
 u'lam': 1.0,
 u'mam': 0.82390874094431876,
 u'pam': 1.0,
 u'ram': 1.0,
 u'sam': 0.82390874094431876,
 u'tam': 1.0}
我试图将其转换为dataframe,我编写了以下代码并得到以下结果:

entity_df = DataFrame.from_dict(entity_dict, orient='index').T 

   lam  ham     sam     ram  kam     jam      tam  bam   mam      pam
0    1    1    0.823909    1    1  0.823909    1    1  0.823909    1
问题在于数据帧与字典的顺序不同: (bam,第一个元素应移到末尾)

因此,我编写以下代码按列对其进行排序:

entity_df.reindex_axis(sorted(entity_df.columns), axis=1)
问题:
我面临的问题有点奇怪。当我在python控制台中逐个运行上述两个命令时,我得到的数据帧将被排序。但是,当我同时执行它们时(通过在编辑器中编写代码,然后运行整个过程),我看不到数据帧已排序。

Python字典未排序。尝试使用python集合模块中的结构

代码如下:

import pandas as pd
from collections import OrderedDict

entity_dict = OrderedDict()
entity_dict['bam'] = 1.0
entity_dict['ham'] = 1.0
entity_dict['jam'] = 0.82390874094431876
entity_dict['kam'] = 1.0
entity_dict['lam'] = 1.0
entity_dict['mam'] = 0.82390874094431876
entity_dict['pam'] = 1.0
entity_dict['ram'] = 1.0
entity_dict['sam'] = 0.82390874094431876
entity_dict['tam'] = 1.0

entity_df = pd.DataFrame.from_dict(entity_dict, orient='index').T 

print(entity_df)

Python词汇表没有排序。尝试使用python集合模块中的结构

代码如下:

import pandas as pd
from collections import OrderedDict

entity_dict = OrderedDict()
entity_dict['bam'] = 1.0
entity_dict['ham'] = 1.0
entity_dict['jam'] = 0.82390874094431876
entity_dict['kam'] = 1.0
entity_dict['lam'] = 1.0
entity_dict['mam'] = 0.82390874094431876
entity_dict['pam'] = 1.0
entity_dict['ram'] = 1.0
entity_dict['sam'] = 0.82390874094431876
entity_dict['tam'] = 1.0

entity_df = pd.DataFrame.from_dict(entity_dict, orient='index').T 

print(entity_df)

您可以使用
OrderedDict
来保留列的顺序。从您的初始代码开始,我们可以按键对dict进行排序

#  ... definition for entity_dict
from collections import OrderedDict

sorted_dict = OrderedDict(sorted(entity_dict.items()))
# sorts column alphabetically
entity_df = DataFrame.from_dict(sorted_dict, orient='index').T
屈服

   bam  ham       jam  kam  lam       mam  pam  ram       sam  tam
0    1    1  0.823909    1    1  0.823909    1    1  0.823909    1
或者,如果事先知道密钥,则可以在构造dict时使用OrderedDict的元组语法,以获得更好的性能。为了简洁起见,我在这里按键对现有的dict进行了排序

因此,您可以等效地定义
sorted\u dict

from collections import OrderedDict

sorted_dict = OrderedDict([(u'bam', 1.0),
  (u'ham', 1.0),  (u'jam', 0.8239087409443188),
  (u'kam', 1.0),  (u'lam', 1.0),
  (u'mam', 0.8239087409443188),
  (u'pam', 1.0),
  (u'ram', 1.0),
  (u'sam', 0.8239087409443188),
  (u'tam', 1.0)])

您可以使用
OrderedDict
来保留列的顺序。从您的初始代码开始,我们可以按键对dict进行排序

#  ... definition for entity_dict
from collections import OrderedDict

sorted_dict = OrderedDict(sorted(entity_dict.items()))
# sorts column alphabetically
entity_df = DataFrame.from_dict(sorted_dict, orient='index').T
屈服

   bam  ham       jam  kam  lam       mam  pam  ram       sam  tam
0    1    1  0.823909    1    1  0.823909    1    1  0.823909    1
或者,如果事先知道密钥,则可以在构造dict时使用OrderedDict的元组语法,以获得更好的性能。为了简洁起见,我在这里按键对现有的dict进行了排序

因此,您可以等效地定义
sorted\u dict

from collections import OrderedDict

sorted_dict = OrderedDict([(u'bam', 1.0),
  (u'ham', 1.0),  (u'jam', 0.8239087409443188),
  (u'kam', 1.0),  (u'lam', 1.0),
  (u'mam', 0.8239087409443188),
  (u'pam', 1.0),
  (u'ram', 1.0),
  (u'sam', 0.8239087409443188),
  (u'tam', 1.0)])

reindex\u axis
不会在适当的位置更改数据帧,您必须重新分配它以查看适配帧:
entity\u df=entity\u df.reindex\u axis(..)
reindex\u axis不会在适当的位置更改数据帧,您必须重新分配它以查看适配帧:
entity\u df=entity\u df.reindex\u axis(..)