【问题标题】:How to detect a string in dataframe column from a list of names in another dataframe column如何从另一个数据框列中的名称列表中检测数据框列中的字符串
【发布时间】:2021-04-28 06:28:03
【问题描述】:

我正在尝试查找新闻文章是否包含我已经将列表建立为数据框列的公司的特定名称。我有一个包含文章文本作为列的数据框,以及另一个包含公司名称的数据框。我想搜索每个文章文本以检测列表中是否存在任何名称,并创建包含在文本中找到的公司名称的单独变量。有人建议我使用“合并”,但由于我没有通用标识符,所以这是不可能的。我希望下面的例子能说明这个想法。

第一个数据框(文章):

Index Text
1 Apple decided to launch new product....
2 Tesla is ...
3 IBM is paying dividend......
4 Amazon is relocating.....
...... ........

带有公司名称(Compname)的第二个数据框:

Index Name
1 BP
2 Tesla
3 Bank of America
4 Amazon
5 JP Morgan
6 Apple
..... ......

最后我想看到的是:

Index Text Name_found
1 Apple decided to launch new product.... Apple
2 Tesla is ... Tesla
3 IBM is paying dividend...... NaN
4 Amazon is relocating..... Amazon
.... ..... ......

我尝试了类似以下的方法,但没有完全完成工作

for x in compname['Name']:
    Article['Name_found']=Article['Text'].str.contains(x, na=False)

感谢您的帮助。真的很感激。

【问题讨论】:

    标签: python pandas string dataframe


    【解决方案1】:

    你想要这个 - >

    pattern = r'(' + '|'.join(df1['Name'].to_list()) + ')'
    df2['Text'] = df2['Text'].str.extract(pat= pattern)
    print(df2)
    

    想法是创建一个具有多个 or 条件的正则表达式模式 - 在这里,这种情况下的模式看起来像这样 -

    '(BP|Tesla|Bank of America|Amazon|JP Morgan|Apple)'
    

    输出->

      Index    Text
    0      1   Apple
    1      2   Tesla
    2      3     NaN
    3      4  Amazon
    

    【讨论】:

    • 谢谢!有没有办法搜索/提取该特定模式而不是相当笼统的表达?例如,我希望看到其中包含大写字母的“Apple”,而不仅仅是一个“apple”或“JP Morgan”作为一个整体,而不仅仅是一个人的名字“Morgan”。
    猜你喜欢
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2021-09-14
    • 2019-11-30
    • 1970-01-01
    相关资源
    最近更新 更多