簡體   English   中英

將參數輸入 df.apply 函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM