我是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
作为参数。
答案 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()