2016-10-30 1 views
1

私はPythonを初めて使いました。マージは部分文字列の一致に基づいている必要があるため、2つのパンダデータフレームを結合する際に多くの問題があります。具体的には上記のように見え約10,000行があるpython部分的な文字列の一致に基づいて2つのパンダデータフレームをマージ

{ "writtenAt":"2015-01-01T18:31:01+00:00", "content":" India\u2019s banks will ramp up sales of bonds that act as capital buffers in 2015" }

私はdfを呼ばれるデータフレームは、このようになります持っています。私はCampNamesのデータフレームのための約500行を持って

{ "ticker":"A", "name":"Agilent Technologies Inc.", "keyword":"Agilent" }

は今、私はこのようになりますcompNamesと呼ばれる別のデータフレームを、持っています。

私は以下のメカニズムによってDFの一致するエントリにcompNamesからティッカー値を代入しようとしています

:列全体のCompNames [「キーワード」]から任意の項目が ある場合

  1. チェック

  2. 一致がある場合、DFのデータフレーム(egdf [「matchedName」])の別個 列と一致するワードを返す

  3. [「コンテンツ」] DFのエントリに含まれます

  4. 複数の一致がある場合、その後、DF [「コンテンツ」]最後

  5. の対応するエントリに一致する単語 のリストを作成DF [「matchedName」]と CompNamesを使用して、DF及びCompNamesに参加私の主要な変数

として[「キーワード」]私は今のところ持っていることである:私はこれを行うとき

# Load select company names 
compNames = pd.read_csv("compNameList_LARA.txt") 
compList = '|'.join(compNames['keyword'].tolist()) 
df['compMatch'] = df.content.str.contains(compList) 

# drop unmatched articles 
df = df[df['compMatch']==True] 

# assign firm names 
df['matchedName'] = df['content'].apply(lambda x: [x for x in compNames['keyword'].tolist() if x in df['content']]) 

はしかし、私は '[MATCをDFのための空のリストを取得しますhedName ']

何が間違っているのか理解できますか?とても感謝しています!!

-jin

答えて

1

それがわかりました。私はちょうどする必要がありました:

df['content'] = df['content'].str.lower().str.split() 
df['matchedName'] = df['content'].apply(lambda x: [item for item in x if item in compNames['keyword'].tolist()]) 
関連する問題