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

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')

否则,您可以使用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')

关于python - Pandas :如何将功能应用于列名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42788311/

10-12 18:13