【发布时间】:2016-10-30 16:54:40
【问题描述】:
我是 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" }
compNames 数据框有大约 500 行。
我正在尝试通过以下机制将 compNames 中的股票代码值分配给 df 的匹配条目:
-
检查整个列
compNames['keyword']中的 any 项是否为 包含在df['content']的条目中 -
如果有匹配,则将匹配的单词作为单独的单词返回
df数据框的列(例如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']
您能帮我找出问题所在吗?非常感谢!!
-晋
【问题讨论】:
标签: python string pandas dataframe