簡體   English   中英

交換或交換多列熊貓數據框中的列名

[英]Swap or exchange column names in pandas dataframe with multiple columns

我想只交換(交換)熊貓中的列名,最好使用單線交換。 另一個問題是我大約有100列,這導致無法重新分配所有列名稱,因此我想替換成對的選定列名稱。 我不知道列的索引(會有所不同),所以我必須使用列名。

我嘗試了以下代碼:

import pandas as pd

probes = {'Spam': [0.0,1.0],
        'Ham': [1.0,0.0],
        'PT011': [0.11,0.21],
        'PT012': [0.12,0.22],
        'PT021': [0.21,0.11],
        'PT022': [0.22,0.12]}

df = pd.DataFrame(probes,columns= ['Spam','Ham','PT011', 'PT012','PT021','PT022'])
print("Before renaming:\n",df)
df.rename(columns={'PT011':'PT021', 'PT012':'PT022','PT021':'PT011','PT022':'PT012'}, inplace=True)
print("After renaming:\n",df)

我得到:

Before renaming:
    Spam  Ham  PT011  PT012  PT021  PT022
0   0.0  1.0   0.11   0.12   0.21   0.22
1   1.0  0.0   0.21   0.22   0.11   0.12
After renaming:
    Spam  Ham  PT021  PT022  PT011  PT012
0   0.0  1.0   0.11   0.12   0.21   0.22
1   1.0  0.0   0.21   0.22   0.11   0.12

但是我希望有些簡單的工作方式可以交換列名,而不必定義兩對要交換的列名,而只定義一對列名,保留具有loc或iloc屬性的數據,喜歡:

df['PT011','PT012']=df['PT021','PT022']

具有預期的輸出(也希望提供建議的訂單):

   Spam  Ham   PT011  PT012  PT021  PT022
0   0.0  1.0   0.21   0.22   0.11   0.12
1   1.0  0.0   0.11   0.12   0.21   0.22

在以下示例中顯示答案: 重命名pandas中的 ,例如:

df.columns = df.columns.str.replace('PT011','PT021')

不適合我的情況,因為它仍然需要提供兩對列名稱,或者需要重新分配所有列的名稱,並且沒有給出所需的列順序。

如果您有可以用來映射內容的字典,則可以正常工作。

df_map = {'PT011':'PT021', 'PT012':'PT022'}
df.columns = [{**df_map, **{v:k for k,v in df_map.items()}}.get(x, x) for x in df.columns]

>>> df
   Spam  Ham  PT021  PT022  PT011  PT012
0   0.0  1.0   0.11   0.12   0.21   0.22
1   1.0  0.0   0.21   0.22   0.11   0.12

或者您可以使用rename()更加安全。

df.rename(columns={**df_map, **{v:k for k,v in df_map.items()}}, inplace=True)

我不確定當您說不想給它兩個名字來翻轉時的意思。 您如何知道要交換哪些列?

至於您的后續問題:

df_map = {'PT011':'PT021', 'PT012':'PT022'}
df_column_order = df.columns.tolist()
df.rename(columns={**df_map, **{v:k for k,v in df_map.items()}}, inplace=True)
df = df.reindex(df_column_order, axis=1)

在pandas文檔中:建立索引並選擇數據我發現了一種簡單的方法來做到這一點:

df[['PT011','PT021']]=df[['PT021','PT011']]
df[['PT012','PT022']]=df[['PT022','PT012']]

它以期望的順序輸出:

After renaming:
    Spam  Ham  PT011  PT012  PT021  PT022
0   0.0  1.0   0.21   0.22   0.11   0.12
1   1.0  0.0   0.11   0.12   0.21   0.22

暫無
暫無

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

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