簡體   English   中英

在 Python 中連接多個數據幀按字母重新排序列

[英]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!


  • Pandas 0.23.4 文檔

    排序: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM