Pandas使用DataFrame排序时出现问题

4

考虑一个基本的数据框(使用Pandas):

testDf = pandas.DataFrame({'c':[1,2],'b':[2,2],'a':[3,4]})

结果如下:
   a  b  c
0  3  2  1
1  4  2  2

替代方案:

   c  b  a
0  1  2  3
1  2  2  4

为什么要按字母顺序排序?我想要第二个结果。

1
正如其他人所指出的那样,字典是无序的。尽管如此,它显然不是随机排序列(我也试过了),因此必须默认进行排序。传递columns=参数似乎是按照您想要的方式进行排序的最佳方法。 - Jeff
3个回答

3
你需要在DataFrame构造函数中添加参数columns,因为dict是无序的:
print (pd.DataFrame({'c':[1,2],'b':[2,2],'a':[3,4]}, columns=['c','b','a']))
   c  b  a
0  1  2  3
1  2  2  4

Dataframe:

在传递数据时,您可以选择传递索引(行标签)和(列标签)参数。如果您传递了索引和/或列,则保证结果DataFrame的索引和/或列。因此,Series字典加上特定索引会丢弃所有与传递索引不匹配的数据。


2

你将字典作为数据参数传递,因此顺序并不与键创建的顺序相同。由于顺序不同,你可以通过将列的列表作为columns参数的参数传递来指定列的顺序:

In [307]:
testDf = pd.DataFrame({'c':[1,2],'b':[2,2],'a':[3,4]}, columns=['c','b','a'])
testDf

Out[307]:
   c  b  a
0  1  2  3
1  2  2  4

0
字典是无序的,因此您不能期望其顺序与初始化时相同。

我尝试使用OrderedDict,但似乎也不起作用。 - Jim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接