簡體   English   中英

應用於(在 Pandas 中)多列

[英]Apply (in Pandas) to Multiple Columns

我正在嘗試運行代碼以使用 apply... 以類似於此鏈接示例的方式重命名一個或多個列中的字段。

然而,我並不想成功。 我注意到如果我只使用一列,則可以運行該函數來重命名。

import pandas as pd

df = pd.DataFrame({'Município': {0:'Águas De Sao Pedro', 1:"Santa Barbara d'Oeste", 2:'Moji-Mirim'},
                   'Dept. Água': {0:'Cia. De Abastecimento', 1:'Serv. De Água E Esgoto', 2:'Cia. De São Paulo'}})

def rename_fields(x):
    return(tab.
           replace(' De ', ' de ').
           replace(' E ', ' e ').
           replace(' Sao ', ' São ').
           replace('Moji', 'Mogi').
           replace('Cia.', 'Companhia').
           replace('Serv.', 'Serviço')
          )

df['Município'] = df['Município'].apply(lambda x: rename_fields(x))

當我使用兩列時,這是一個問題。

df[['Município', 'Dept. Água']] = df[['Município', 'Dept. Água']].apply(lambda x: rename_fields(x))

我注意到這與使用兩個 [] 有關,即 [['Col1', Col2]]。 即使你只使用一列,但是這樣[['Col1']],它也不起作用。

col = 'Município'  # will work
col = ['Município']  # will not work
col = ['Município', 'Dept. Água']  # What I need!!   

df[col] = df[col].apply(lambda x: rename_fields(x))

對我來說,作為一個包含一個或多個項目的列表工作很重要,因為在我的原始代碼中,我有一個從前一個函數創建的列表,我在其中定義了應在哪些列中應用某些函數。

使用 df.rename 重命名多個列:

使用 df.rename() 函數並引用要重命名的列:

renamed_df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})

或者重命名現有的 DF 而不是創建新的 DF

df.rename(columns={'oldName1': 'newName1', 'oldName2})

如果對您使用列列表很重要,則可以使用以下命令:

for column in columns:
    df[column] = df[column].apply(lambda x: rename_fields(x))

您是否嘗試過使用 pandas.DataFrame.applymap?

它會將您的功能應用於所有 DataFrame,我知道這就是您想要的。

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.applymap.html

暫無
暫無

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

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