我有两个 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' object has no attribute 'head'
最佳答案
默认情况下,您的函数不返回任何内容。因此,默认情况下,它返回 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 数据的副本。使用什么应该根据风格和需求来决定。
关于Python数据框: Create function that makes all values in one column uppercase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47875208/