AttributeError:“系列”对象没有属性“上层”

时间:2019-11-04 02:40:47

标签: python pandas

我是python和pandas的新手,但是有一个问题,我无法缠住我的头。

我正在尝试向DataFrame添加一个新列。为此,我使用了assign()函数。

互联网上的大多数示例都很琐碎,我无法找到解决问题的方法。

有效方法:

my_dataset.assign(new_col=lambda x: my_custom_long_function(x['long_column']))

def my_custom_long_function(input)
  return input * 2

什么不起作用:

my_dataset.assign(new_col=lambda x: my_custom_string_function(x['string_column'])

def my_custom_string_function(input)
  return input.upper()

让我感到困惑的是,在调试中我可以看到,即使对于my_custom_long_function,该参数也是Series,而不是long

我只想使用lambda函数并传递列的来完成已经编写的复杂函数。我该怎么做?

编辑:这里的示例仅用于说明目的,实际代码基本上是一个现有的复杂函数,不关心熊猫的类型,需要使用str作为参数。

1 个答案:

答案 0 :(得分:1)

由于该列没有upper方法,因此要使用它,您需要执行str.upper

my_dataset.assign(new_col=lambda x: my_custom_string_function(x['string_column'])

def my_custom_string_function(input)
  return input.str.upper()

也就是说,我会使用:

my_dataset['new column'] = my_dataset['string_column'].str.upper()

为了效率。

编辑:

my_dataset['new column'] = my_dataset['string_column'].apply(lambda x: my_custom_string_function(x))
def my_custom_string_function(input):
    return input.upper()