如何阻止pandas自动按字母顺序对数据框的列进行排序?

3

我有一个嵌套字典,想将其转换为数据框。当我使用

pd.DataFrame(my_dict)

它修改列的顺序为字母顺序。我希望列的顺序与输入一致。

几乎与此问题完全相似的问题在这里:

Pandas:创建数据框而不按字母排序列名

被接受的答案有两种解决方案。在我的情况下,我认为第一个方案可能行不通或者至少很繁琐不易读,因为我的字典是嵌套的并且比他的长得多。

第二种解决方案涉及使用collections.OrderedDict创建有序字典,然后将其转换为数据框。这应该可以解决问题,但却不能对我起作用。数据框仍然按字母顺序排序。我认为这可能与我的字典是嵌套的有关。我尝试在所有嵌套字典上使用collections.OrderedDict,但仍然没有起作用。好吧,它工作了,但没有改变我的排序列问题。这是我的代码:

my_dict = collections.OrderedDict()
code code code
for fname in os.listdir(myfile)
labels = collections.OrderedDict({A : 1, C : 2, B : 3, etc})
my_dict.update({fname : labels})

显然,这非常简化,但它展示了一个基本思想。我创建一个空有序字典,然后遍历文件并收集带有值的标签,并将它们存储在一个有序字典中,然后使用fname和labels有序字典更新my_dict。

当我使用pd.DataFrame(my_dict).T时输出的数据框按字母顺序排序列(例如A,C,B)。我希望它按输入顺序排列。

如果您知道为什么我的数据框仍然自动按字母表顺序排序或其他排序方法,请告诉我!


在Python的较新版本(>= 3.6)中,普通字典中键的顺序是被记住的。因此,像 pandas.DataFrame(dict(a=[1], d=[2],c=[3])) 这样的代码将会有一个列数组 ['a','d','c']。您是否可以考虑使用更高版本的Python呢? - Chris
不,我可能可以使用pandas.DataFrame(my_dict(a=[1], d=[2], etc),但是我不想把所有的内容都打出来,因为我有很多列。我会尝试一下,现在先用这个方法,除非有人知道其他的解决方案。 - masked
我有完全相同的问题,这真的非常烦人,因为新顺序的控制台输出根本没有任何意义。如果我找到解决方案,我会发帖的。 - OnceUponATime
1个回答

0

如果使用参数axis=1sort=False,Pandas不会自动重新排序列。

以下是将从电子表格中读取的数据框df附加到空数据框f的示例,同时保留原始列顺序:

f = f.append(df, axis=1, ignore_index=False, sort=False)

ignore_index=False保留原始列的标签。


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