[英]Concat multiple dataframes in Python reorders the columns by alphabet
我沒有問題,而是我想理解的行為。
我有一個帶有 12 張紙的 Excel,我希望將它們全部組合在 1 張 dataframe 中,並將圖紙名稱作為額外的列。 我可以做到,但有 1 個我無法解釋的奇怪行為:dataframe 的列的最終順序更改為按字母順序排列。
這是我的流程:我閱讀了 10 張 excel。
每個工作表都在 dataframe 中讀取,所有工作表都具有相同的形狀(73 行 x 50 列)和相同的分層列。 (2 級)。 讀入一張紙后,我將 append 轉為 dataframe,然后我閱讀下一張紙等。
結果是 876 行和 50 列的 dataframe。 那很好。 但是 - 如前所述 - 列順序與原始集不同。
解決方法:我將訂單保存在一個列表中,然后在最終的 dataframe 中重新應用它,但這並不能解釋這種行為。
如果我嘗試使用示例代碼重放此操作(見下文),但我無法重放該行為,我的示例代碼將按預期工作並保留順序。 知道如何開始調查這種行為嗎?
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!
排序:boolean,默認無
如果連接為“外部”時未對齊,則對非連接軸進行排序。 當前默認排序已棄用,並將在 pandas 的未來版本中更改為不排序。
顯式傳遞
sort=True
以使警告靜音並進行排序。 顯式傳遞sort=False
以使警告靜音而不是排序。這在
join='inner'
時無效,它已經保留了非串聯軸的順序。0.23.0 版中的新功能。
Pandas 最新穩定版和v1.2.1(撰寫本文時)
排序:布爾值,默認為 False
如果連接為“外部”時未對齊,則對非連接軸進行排序。 這在 join='inner' 時無效,它已經保留了非串聯軸的順序。
在 1.0.0 版更改: 默認情況下更改為不排序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.