我有两个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'
答案 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的副本数据。使用什么应该由风格和需求的组合来决定。