【问题标题】:python merge two pandas data frames based on partial string matchpython根据部分字符串匹配合并两个熊猫数据帧
【发布时间】: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 的匹配条目:

  1. 检查整个列 compNames['keyword'] 中的 any 项是否为 包含在df['content'] 的条目中

  2. 如果有匹配,则将匹配的单词作为单独的单词返回 df 数据框的列(例如df['matchedName']

  3. 如果有多个匹配项,则创建一个匹配词列表 到df['content']对应的入口

  4. 最后,使用 df['matchedName']dfcompNamescompNames['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


    【解决方案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()])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2020-10-11
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多