繁体   English   中英

类型错误:Pandas Dataframe 应用函数,参数传递

[英]Type Error: Pandas Dataframe apply function, argument passing

默认情况下,列都设置为零。 在 URL 列上存在列名字符串的 (row,column) 处将条目设为 1

L # 包含用于检查是否在 URL 上找到的列名的列表

数据框图像

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

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

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

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

类型错误:generate() 需要 2 个位置参数,但给出了 9 个

任何的意见都将会有帮助

编辑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,))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM