[英]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 個。
為避免這種情況,您可以遵循以下任一選項
col
值賦給參數本身df[col].apply(generate, col=col)
df[col].apply(generate, args=(col,))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.