数据框未按列名排序

时间:2015-10-12 17:14:14

标签: 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}

我正在尝试将其转换为数据框,我编写以下代码并获得以下结果:

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控制台中一个接一个地运行上述命令时,我获得的数据帧被排序。但是,当我一起执行它们时(通过在编辑器中编写代码然后运行整个程序)我没有看到数据框已经排序。

2 个答案:

答案 0 :(得分:2)

Python dictionnary没有订购。尝试使用python collections模块中的OrderedDict结构。

以下是代码:

startActivityForResult(enableIME, 555);

答案 1 :(得分:2)

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

#  ... 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的元组语法以获得更好的性能。为了简洁起见,我已经按键排序了现有的字典。

因此,您可以将sorted_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)])