Pandas:如何将函数应用于列名

时间:2017-03-14 14:12:00

标签: python pandas

我希望所有列都以统一的方式命名,例如:

Last Name -> LAST_NAME
e-mail -> E_MAIL
ZIP code 2 -> ZIP_CODE_2

为此,我编写了一个函数,该函数将所有符号加上大写,保留数字并用下划线('_')替换其余字符。然后它只用一个替换多个下划线,并在两端修剪下划线。

如何将此函数(lambda)应用于 Pandas 中的列名?

2 个答案:

答案 0 :(得分:8)

您可以通过调用矢量化apply方法而不使用str来执行此操作:

In [62]:
df = pd.DataFrame(columns=['Last Name','e-mail','ZIP code 2'])
df.columns

Out[62]:
Index(['Last Name', 'e-mail', 'ZIP code 2'], dtype='object')

In [63]:    
df.columns = df.columns.str.upper().str.replace(' ','_')
df.columns    

Out[63]:
Index(['LAST_NAME', 'E-MAIL', 'ZIP_CODE_2'], dtype='object')

否则,您可以使用IndexSeries对象转换为to_series,以便使用apply

In [67]:
def func(x):
    return x.upper().replace(' ','_')
df.columns = df.columns.to_series().apply(func)
df

Out[67]:
Empty DataFrame
Columns: [LAST_NAME, E-MAIL, ZIP_CODE_2]
Index: []

感谢@PaulH建议将renamelambda一起使用:

In [68]:
df.rename(columns=lambda c: c.upper().replace(' ','_'), inplace=True)
df.columns

Out[68]:
Index(['LAST_NAME', 'E-MAIL', 'ZIP_CODE_2'], dtype='object')

答案 1 :(得分:2)

您只需设置数据框的.columns属性即可。因此,为了重命名它,您可以使用:

df.columns = list(map(yourlambda,df.columns))

您当然用您的lambda表达式替换 yourlambda