应用于(以熊猫为单位)多列

时间:2020-03-15 23:14:43

标签: python pandas

我正在尝试运行代码以使用Apply ...重命名一个或多个列中的字段,其方式与此link example类似。

但是,我并不是想成功。 我注意到,如果我只使用一列,就可以运行该函数来重命名。

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))

对我来说,作为一个列表包含一个或多个项目非常重要,因为在我的原始代码中,我有一个从上一个函数创建的列表,在该函数中我定义了应在哪些列中应用某些功能。

3 个答案:

答案 0 :(得分:1)

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

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

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

或重命名现有DF而不是创建新DF

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

答案 1 :(得分:0)

如果对使用列列表很重要,则可以使用:

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

答案 2 :(得分:-1)

您是否尝试过使用pandas.DataFrame.applymap?

它将对所有DataFrame应用您的功能,我知道这就是您想要的。

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

相关问题