Python Dataframe:创建一个函数,使一列中的所有值都为大写

时间:2017-12-18 19:32:55

标签: python function pandas

我有两个python数据框。我想将两个数据框的一列中的所有值都设为大写。

以下代码有效:

df_ERA4['reqmnt'] = df_ERA4['reqmnt'].str.upper()
df_ERA5['reqmnt'] = df_ERA5['reqmnt'].str.upper()

但是当我想在一个函数中做同样的事情时,它不起作用:

def uppercase(df):
    df['reqmnt'] = df['reqmnt'].str.upper()

df_ERA4 = uppercase(df_ERA4)
df_ERA5 = uppercase(df_ERA5)

df_ERA4.head()

具体来说,当我运行上面的代码时,它会给我以下错误:AttributeError:' NoneType'对象没有属性' head'

1 个答案:

答案 0 :(得分:3)

您的功能默认不返回任何内容。因此,默认情况下,它返回None。在调用函数时,正确的做法是不将返回值赋给任何东西,因为正在进行更改。

现在有几种选择。第一个是:不要退货,也不要分配任何东西。

def upper(df, col):
    df[col] = df[col].str.upper()

upper(df, 'reqmnt')

然而,这可能不是最好的方法(就个人而言,我没有很多花哨的功能来执行就地操作)。或者,您可以通过assign电话返回一份副本。

def upper(df, col):
    return df.assign(**{col : df[col].str.upper()})       

df = upper(df, 'reqmnt')

请注意,这方面需要注意 - assign会返回一份副本,有时,效率/性能至关重要,您不希望不必要地制作GB的副本数据。使用什么应该由风格和需求的组合来决定。