我有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版更改:默认不排序