[英]Inputting arguments into df.apply function
我知道這是一個常見問題,但盡管有很多 SO 帖子,但我仍然感到困惑。 這是我的問題:
我有這個功能:
def query_text_by_keyword(df, word_list):
for word in word_list:
if word in df.words:
match = True
else:
match = False
return match
master_df['neg_query_match'] = master_df.apply(query_text_by_keyword, axis=1, args=(master_df, neg_words))
我的函數接受 2 個 args,一個帶有“words”列的 df(值是文本字符串)和一個 word_list(字符串列表)。 我想遍歷 word_list 中的每個單詞,看看這個單詞是否在 df.words 的每一行中。 如果是,我想創建一個列,將該行標記為 True。 但是,我不斷收到此錯誤:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-64-8ccf9cc7c0c6> in <module>
7 return match
8
----> 9 master_df['neg_query_match'] = master_df.apply(query_text_by_keyword, axis=1, args=(master_df, neg_words))
C:\Anaconda3\lib\site-packages\pandas\core\frame.py in apply(self, func, axis, broadcast, raw, reduce, result_type, args, **kwds)
6904 kwds=kwds,
6905 )
-> 6906 return op.get_result()
6907
6908 def applymap(self, func):
C:\Anaconda3\lib\site-packages\pandas\core\apply.py in get_result(self)
184 return self.apply_raw()
185
--> 186 return self.apply_standard()
187
188 def apply_empty_result(self):
C:\Anaconda3\lib\site-packages\pandas\core\apply.py in apply_standard(self)
290
291 # compute the result using the series generator
--> 292 self.apply_series_generator()
293
294 # wrap results
C:\Anaconda3\lib\site-packages\pandas\core\apply.py in apply_series_generator(self)
319 try:
320 for i, v in enumerate(series_gen):
--> 321 results[i] = self.f(v)
322 keys.append(v.name)
323 except Exception as e:
C:\Anaconda3\lib\site-packages\pandas\core\apply.py in f(x)
110
111 def f(x):
--> 112 return func(x, *args, **kwds)
113
114 else:
TypeError: ('query_text_by_keyword() takes 2 positional arguments but 3 were given', 'occurred at index 0')
這里發生了什么? 關於向 df.apply 函數提供 args 的 SO 帖子推薦這種格式。
幫助說:
args :元組除了數組/系列之外還要傳遞給func
位置參數。
所以熊貓會自動交出數據幀。
因此,將您的代碼更改為:
master_df['neg_query_match'] = master_df.apply(query_text_by_keyword,
axis=1,
args=(neg_words,))
注意:具有一個元素的元組需要一個尾隨逗號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.