Type Error: Pandas Dataframe apply function, argument passing

Type Error: Pandas Dataframe apply function, argument passing

默认情况下,列都设置为零。 在 URL 列

上出现列名字符串的(行,列)处输入 1

L # 包含用于检查是否在 URL

上找到的列名的列表

Dataframe Image

def generate(statement,col):
    if statement.find(col) == -1:
      return 0
    else:
      return 1

for col in L:
  df3[col].apply(generate, args=(col))

我是初学者,它抛出错误:

/usr/local/lib/python3.6/dist-packages/pandas/core/series.py in f(x)
4195 4196 def f(x): -> 4197 return func(x, *args, **kwds) 4198 4199 else:

TypeError: generate() takes 2 positional arguments but 9 were given

任何建议都会有所帮助

编辑 1:

之后,

df3[col].apply(generate, args=(col,))

出现错误:

> --------------------------------------------------------------------------- AttributeError                            Traceback (most recent call
> last) <ipython-input-162-508036a6e51f> in <module>()
>       1 for col in L:
> ----> 2   df3[col].apply(generate, args=(col,))
> 
> 2 frames pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
> 
> <ipython-input-159-9380ffd36403> in generate(statement, col)
>       1 def generate(statement,col):
> ----> 2     if statement.find(col) == -1:
>       3         return 0
>       4     else:
>       5         return 1
> 
> AttributeError: 'int' object has no attribute 'find'

编辑 2: “我没有强调 for 循环代码中的 URL 列会纠正这一点”

编辑 3: 更新并固定为,

def generate(statement,col):
    if col in str(statement):
        return 1
    else:
        return 0

for col in L:
  df3[col] = df3['url'].apply(generate, col=col)

感谢大家的支持!

创建1个元素的元组时,元素后需要逗号:args=(col,),否则括号将被忽略。

这似乎是在 args 中传递参数的问题。 apply 函数中的 args 会将输入作为元组传递给函数。

让我们看一个例子来描述它,

df = pd.DataFrame([['xyz', 'US'],['abc', 'MX'],['xyz', 'CA']], columns = ["Name", "Country"])

print(df)

Name    Country
xyz     US
abc     MX
xyz     CA

根据需要创建带有额外参数的函数,

def generate(statement,col):
    if statement.find(col) == -1:
        return 0
    else:
        return 1

将L视为列表,['Name', 'Country']

现在,让我们在循环

中应用带有额外参数的函数generate
for col in L:
    print(df[col].apply(generate, args=(col)))


TypeError: generate() takes 2 positional arguments but 5 were given

现在,我们可以看到错误发生是因为 (col) 是元组中的单个元素,因此 args 将输入为 args=('N', 'A', 'M', 'E')。与 statement 一起,现在提供了额外的 4 个输入,而不仅仅是 1 个。

为避免这种情况,您可以采用以下任一选项

  1. col值直接赋给参数本身
df[col].apply(generate, col=col)
  1. 以逗号分隔的元组形式传递参数。 请注意,对于单个元素元组,请在末尾添加一个逗号
df[col].apply(generate, args=(col,))