我是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的匹配条目:
检查整个列中的任何项目CompNames ['keyword']是否为 包含在df ['content']
如果匹配,则将匹配的单词作为单独的单词返回 df数据帧的列(例如,['matchedName'])
如果有多个匹配项,则创建匹配单词列表 到df ['content']
最后,使用df ['matchedName']和来加入df和CompNames CompNames ['keyword']作为我的关键变量
到目前为止我所拥有的是:
# 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
答案 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()])