pandas.concat 中的列顺序

新手上路,请多包涵

我做如下:

 data1 = pd.DataFrame({ 'b' : [1, 1, 1], 'a' : [2, 2, 2]})
data2 = pd.DataFrame({ 'b' : [1, 1, 1], 'a' : [2, 2, 2]})
frames = [data1, data2]
data = pd.concat(frames)
data

   a    b
0   2   1
1   2   1
2   2   1
0   2   1
1   2   1
2   2   1

数据列顺序按字母顺序排列。为什么会这样?以及如何保持原来的顺序?

原文由 Edward 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

您正在从字典中创建 DataFrame。字典是无序的,这意味着键没有特定的顺序。所以

d1 = {'key_a': 'val_a', 'key_b': 'val_b'}

d2 = {'key_b': 'val_b', 'key_a': 'val_a'}

是(可能)相同的。

除此之外,我假设 pandas 默认按降序对字典的键进行排序(不幸的是,我没有在文档中找到任何提示来证明该假设)导致您遇到的行为。

因此,基本动机是对 DataFrame 中的列进行求助/重新排序。您可以 按如下 方式执行此操作:

 import pandas as pd

data1 = pd.DataFrame({ 'b' : [1, 1, 1], 'a' : [2, 2, 2]})
data2 = pd.DataFrame({ 'b' : [1, 1, 1], 'a' : [2, 2, 2]})
frames = [data1, data2]
data = pd.concat(frames)

print(data)

cols = ['b' , 'a']
data = data[cols]

print(data)

原文由 albert 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 0.23.0 版本开始,您可以阻止 concat() 方法对返回的 DataFrame 进行排序。例如:

 df1 = pd.DataFrame({ 'a' : [1, 1, 1], 'b' : [2, 2, 2]})
df2 = pd.DataFrame({ 'b' : [1, 1, 1], 'a' : [2, 2, 2]})
df = pd.concat([df1, df2], sort=False)

pandas 的未来版本将更改为默认不排序。

原文由 Michael H. 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题