Pandas.apply не возвращает значения в простом столбце - PullRequest
0 голосов
/ 05 февраля 2019

Я запускаю следующее на своих пандах df 'sp500news3', он возвращает значение None

def extract_ticker(title):
    for word in title:
        if word in constituents['Symbol']:
            return word

sp500news3['tickers'] = sp500news3['title'].apply(extract_ticker)

#sp500news3 sample:



  index date_publish    title   tickers
0   79944   2007-01-29 19:08:35 (MSFT, Vista, corporate, sales, go, very, well) None
1   181781  2007-12-14 19:39:06 (WMB, No, Anglican, consensus, on, Episcopal, Church)   None
2   213175  2008-01-22 11:17:19 (CSX, quarterly, profit, rises) None
3   93554   2008-01-22 18:52:56 (C, says, 30, bln, capital, helps, exceed, target)  None

составляющих ['Symbol']: пример

0      TWX  
1      C  
2      MSFT  
3      WMB ...

Репликация пространстваДокумент из следующего:

constituents =  pd.DataFrame({"Symbol":["TWX","C","MSFT","WMB"]})

sp500news3 = pd.DataFrame({"title":["MSFT Vista corporate sales go very well","WMB No Anglican consensus on Episcopal Church","CSX quarterly profit rises",'C says 30 bln capital helps exceed target','TWX plans cable spinoff']})

import spacy

nlp = spacy.load('en_core_web_sm')

sp500news3['title'] = sp500news3['title'].apply(nlp)

1 Ответ

0 голосов
/ 05 февраля 2019

Вы должны использовать word.text, поскольку, когда повторяется по spacy.tokens.doc.Doc, оно повторяется по Token, что не реализует __eq__ для строк :

for word in title:
    if word.text in constituents['Symbol'].values:
        return word

На вашем примере:

In [11]: sp500news3['title'].apply(extract_ticker)
Out[11]:
0    MSFT
1     WMB
2    None
3       C
4     TWX
Name: title, dtype: object
...