我正在尝试运行代码以使用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))
对我来说,作为一个列表包含一个或多个项目非常重要,因为在我的原始代码中,我有一个从上一个函数创建的列表,在该函数中我定义了应在哪些列中应用某些功能。
答案 0 :(得分:1)
使用df.rename()函数并引用要重命名的列:
renamed_df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
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