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

12

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

Last Name -> LAST_NAME
e-mail -> E_MAIL
ZIP code 2 -> ZIP_CODE_2
为此,我编写了一个函数,将所有符号大写,保留数字,并将其余字符替换为下划线('_')。然后将多个下划线替换为一个下划线,并修剪两端的下划线。
如何将此函数(lambda)应用于 Pandas 中的列名?
3个回答

22

通过调用向量化的str方法,您可以在不使用apply的情况下完成此操作:

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

否则,您可以使用to_seriesIndex对象转换为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 建议使用带有 lambdarename

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

6

您可以简单地设置数据框的.columns属性。因此,要重命名它,您可以使用以下代码:

df.columns = list(map(<b>yourlambda</b>,df.columns))

当然,你需要用你的lambda表达式替换yourlambda


2
您也可以使用列表推导式。例如,以下是如何仅保留列名称的5个字符:
df.columns = [col[0:6] for col in df.columns]

我喜欢这个。更一般地说:df.columns = [myfunc(col) for col in df.columns] - Idiot Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接