簡體   English   中英

pandas 不會重命名多索引列名

[英]pandas won't rename multiindex column name

我剛剛花了幾個小時試圖讓它工作,我開始認為我想要不可能的事情,盡管我很確定它可以完成。 我有一個 pandas dataframe 它有一個多索引 header (excel 電子表格,3 行標題)。 我肯定在看它,所以我知道它存在,但是當我嘗試根據官方文檔重命名列時,我被告知找不到列名。

該表如下所示:

Test              | Test1         | Test2
                  | abc   | xyz   | abc   | xyz
geo1    | geo2    | geo1  | geo2  | geo1  | geo2
------------------------------------------------
a       | x       | 1     | 0.5   | 1     | 0.5
b       | y       | 2     | 0.2   | 2     | 0.2
c       | z       | 3     | 0.4   | 3     | 0.3

例如,我只是想將“Test”更改為“Boom”。 test 是級別 0 中列名的第一個值,但它不起作用。 我使用了其中之一:

df.rename(columns={df.columns[0][0]: 'Boom'}, inplace=True, errors='raise')
df.rename(columns={df.columns[0][0]: 'Boom'}, level=0, inplace=True, errors='raise')
df.rename(columns={df.columns.values[0][0]: 'Boom'}, inplace=True, errors='raise')

問題是,即使我對列名和級別進行硬編碼,它仍然不起作用,這應該可以解決問題,因為它適用於我的其他腳本(2 個級別:不是 3 個):

df.rename(columns={'Test': 'Boom'}, level=0, inplace=True, errors='raise')

這個錯誤很有趣,因為它告訴我它找不到“測試”列(它實際上是告訴我它找不到它剛剛命名的列......)。 我究竟做錯了什么??

謝謝你們!

df.columns.set_levels(['Boom1','Boom2','Boom3'],level=0,inplace=True)

如果您的列是 Boom1,...,Boom1000,首先創建一個名稱列表

ll = [f"Boom{i}" for i in range(1,1001)]
df.columns.set_levels(ll,level=0,inplace=True)

我剛剛從 function 中刪除了 errors='raise' 並且它起作用了。 pandas 的工作方式沒有邏輯,但這似乎已經成功了。 不確定某些東西是如何工作的,但如果你告訴它在需要時引發錯誤,它就會停止工作。 無論如何,感謝所有人的嘗試。 如果有人能解釋為什么會這樣,為了我自己的理智,我會很感激的!

這種參數組合對我有用:

index = pandas.MultiIndex.from_tuples([('A', 'X'), ('B', 'Y'), ('C', 'Z')], names=['id1', 'id2'])
columns = pandas.MultiIndex.from_tuples([('Test1', 'a', 'x')], names=['col1', 'col2', 'col3'])

df = pandas.DataFrame(
    data = [1, 2, 3],
    index=index,
    columns=columns
)

df.rename(columns={'Test1': 'Boom!'}, level='col1')

它返回一個新的 dataframe:

col1    Boom!
col2        a
col3        x
id1 id2      
A   X       1
B   Y       2
C   Z       3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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