python基于部分字符串匹配

时间:2016-10-30 16:54:41

标签: python string pandas dataframe

我是Python的新手,我在加入两个pandas数据帧时遇到了很多麻烦,因为合并应该基于部分字符串匹配。更具体地说:

我有一个名为df的数据框,如下所示:

{ "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" }

其中大约有10,000行,如上所示。

现在,我有另一个名为compNames的数据框,如下所示:

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

我有大约500行的CampNames数据帧。

我试图通过以下机制将compNames的股票价值指定给df的匹配条目:

  1. 检查整个列中的任何项目CompNames ['keyword']是否为 包含在df ['content']

  2. 的条目中
  3. 如果匹配,则将匹配的单词作为单独的单词返回 df数据帧的列(例如,['matchedName'])

  4. 如果有多个匹配项,则创建匹配单词列表 到df ['content']

  5. 的相应条目
  6. 最后,使用df ['matchedName']和来加入df和CompNames CompNames ['keyword']作为我的关键变量

  7. 到目前为止我所拥有的是:

    # 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']])
    

    然而,当我这样做时,我得到一个df ['matchedName']

    的空列表 你可以帮我弄清楚出了什么问题吗?非常感谢!!

    -Jin

1 个答案:

答案 0 :(得分:3)

想出来。我只需要这样做:

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()])