簡體   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