我希望所有列都以统一的方式命名,例如:
Last Name -> LAST_NAME
e-mail -> E_MAIL
ZIP code 2 -> ZIP_CODE_2
为此,我编写了一个函数,该函数将所有符号都大写,保留数字,并用下划线(
'_'
)替换其余字符。然后,它仅用一个下划线替换多个下划线,并在两端修剪下划线。如何将此函数(lambda)应用于Pandas中的列名?
最佳答案
您可以通过调用矢量化的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')
关于python - Pandas :如何将功能应用于列名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42788311/