应用(Pandas)到多个列

2024-06-29 00:31:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试运行一个代码,使用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))

对我来说,作为一个列表使用一个或多个项是很重要的,因为在我的原始代码中,我有一个从以前的函数创建的列表,在这个列表中,我定义了某些函数应该应用于哪些列


Tags: lambda函数fieldsdf列表decolreplace
3条回答

使用df重命名多列。重命名:

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

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

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

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

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

它将把你的函数应用于所有的数据帧,我知道这就是你想要的

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

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

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

相关问题 更多 >