我希望所有列都以统一的方式命名,例如:
Last Name -> LAST_NAME
e-mail -> E_MAIL
ZIP code 2 -> ZIP_CODE_2
为此,我编写了一个函数,该函数将所有符号加上大写,保留数字并用下划线('_'
)替换其余字符。然后它只用一个替换多个下划线,并在两端修剪下划线。
如何将此函数(lambda)应用于 Pandas 中的列名?
答案 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')
否则,您可以使用Index
将Series
对象转换为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建议将rename
与lambda
一起使用:
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
。