Python中的Concat多个数据帧按字母重新排序



我有NOT这是一个问题,但我想理解的行为。

我有一个Excel与12个工作表,我希望他们都合并在1个数据框架,与工作表名称作为额外的列。我可以这样做,但有一个奇怪的行为我无法解释:数据框的列的最终顺序被更改为字母顺序。

这是我的流程:我通读了10张excel表格。
每个表单都在一个数据框架中读取,所有工作表都具有相同的形状(73行x 50列)和相同的分层列。(2)水平。当一个工作表被读入时,我将它附加到一个数据帧,然后我读取下一个工作表等等。

结果是一个876行50列的数据帧。这很好。但是,如前所述,与原始集合的列顺序不同。

解决方法:我将顺序保存在列表中,并在最终数据帧重新应用它,但这并不能解释行为。

如果我尝试用示例代码(见下面)重播此行为,但我不能重播该行为,我的示例代码按预期工作并保留顺序。知道我该如何开始调查这种行为吗?

import pandas as pd
import numpy as np
t0=pd.DataFrame()
t1=pd.DataFrame(np.arange(12).reshape((4,3)), 
columns=[['one','two','four'],['five','six','eight']])
t1['Month']='January'
t1.set_index(['Month'], inplace=True)
t2=pd.DataFrame(np.arange(12,24).reshape((4,3)),
columns=[['one','two','four'],['five','six','eight']])
t2['Month']='February'
t2.set_index(['Month'], inplace=True)
t3=pd.concat([t0,t1])
t3=pd.concat([t3,t2])
t3

你有旧版本的Pandas吗?

旧的默认.concat()sort参数为unset (None),根据数据是否已经排序进行排序,而最新的默认为False

尝试显式设置sort=False和/或升级Pandas(如果可能的话)!


  • Pandas 0.23.4 docs

    : boolean,默认无

    join为' outer '时,如果非连接轴尚未对齐,则对其进行排序。当前默认的排序已被弃用,并将在未来版本的pandas中更改为不排序。

    显式传递sort=True以沉默警告和排序。显式地传递sort=False来沉默警告而不排序。

    join='inner'已经保留了非连接轴的顺序时,此操作不起作用。

    0.23.0新版功能。

  • Pandas最新稳定版和v1.2.1版本(写入时间)

    sort: bool,默认False

    在连接为"外部"时,如果非连接轴尚未对齐,则对其进行排序。这在join='inner'时不起作用,因为它已经保留了非连接轴的顺序。

    在1.0.0版更改:默认不排序

最新更新