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 个。
为避免这种情况,您可以采用以下任一选项
- 将
col
值直接赋给参数本身
df[col].apply(generate, col=col)
- 以逗号分隔的元组形式传递参数。
请注意,对于单个元素元组,请在末尾添加一个逗号。
df[col].apply(generate, args=(col,))
默认情况下,列都设置为零。 在 URL 列
上出现列名字符串的(行,列)处输入 1L # 包含用于检查是否在 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 个。
为避免这种情况,您可以采用以下任一选项
- 将
col
值直接赋给参数本身
df[col].apply(generate, col=col)
- 以逗号分隔的元组形式传递参数。 请注意,对于单个元素元组,请在末尾添加一个逗号。
df[col].apply(generate, args=(col,))