使用功能修改PANDAS DataFrame列名称



我想创建一个可以应用于每个数据范围的函数以清理列名。

例如:

def standardize_headers(df):
     return df.columns.str.replace(' ', '_').str.lower()

但是,当我使用代码应用时:

df2 = df.apply(standardize_headers)

我得到错误:

AttributeError: ("'Series' object has no attribute 'columns'", u'occurred at index External_Code')

'external_code'是DF中的第一列。我知道我可以作为lambda函数做这个简单的示例,但是我计划具有多个步骤的更复杂的功能,因此我需要能够在用户定义的函数中引用列名。我知道应用将对象视为系列。那么,如何参考用户定义的功能中的列?也许问题是我将功能应用于数据框的方式。

尝试一下:

def standardize_headers(df, func=None):
    df.columns = df.columns.str.replace(' ', '_').str.lower()
    if func:
      df = df.apply(func)
    return df
df2 = standardize_headers(df)

您可以在此模板上扩展以简单地返回重命名的数据框架,或者传递多个功能以在返回数据框架之前应用于数据框架。

做到这一点的一种简单方法就是使用rename方法。您可以传递columns参数a函数,并且此函数将应用于每个列名。请注意,函数中的x是字符串,因此您可以直接使用字符串方法。

def standardize_headers(x):
    return x.replace(' ', '_').lower()
df.rename(columns=standardize_headers)

应用功能直接与每列中的值一起使用。