首页 > 解决方案 > 如何选择具有指定单词的字符串行?

问题描述

我有一个带有评论的数据库,我想创建另一个数据库,其中只有包含一些特定单词的评论。

我知道有一个类似的功能,contains但我想知道如何在整个数据库上执行此操作,并且只提取带有特定单词的评论,以便对这些特定主题进行一些高级分析。

你有办法做到这一点吗?我确定我已经在某个地方看到过,但我找不到在哪里。

这是我的数据库的样子:数据库

我用 BeautifulSoup 和这个脚本获得了它:

import re
import json
import requests
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
import datetime


root_url = 'https://fr.trustpilot.com/review/jardiland.com'
urls = [ '{root}?page={i}'.format(root=root_url, i=i) for i in range(1,9) ]

comms = []
notes = []
dates = []

for url in urls: 
    results = requests.get(url)

    soup = BeautifulSoup(results.text, "html.parser")

    commentary = soup.find_all('div', class_='review-content')

    for container in commentary:

        comm  = container.find('p', class_ = 'review-content__text').text.strip()
        comms.append(comm)

        note = container.find('div', class_ = 'star-rating star-rating--medium').find('img')['alt']
        notes.append(note)

        date_tag = container.div.div.find("div", class_="review-content-header__dates")
        date = json.loads(re.search(r"({.*})", str(date_tag)).group(1))["publishedDate"]

        dates.append(date)

data = pd.DataFrame({
    'comms' : comms,
    'notes' : notes,
    'dates' : dates
    })

data['comms'] = data['comms'].str.replace('\n', '')

data['dates'] = pd.to_datetime(data['dates']).dt.date
data['dates'] = pd.to_datetime(data['dates'])

#print(data.head())
data.to_csv('filetest.csv', sep=';', index=False)

谢谢 !

标签: pythonpython-3.x

解决方案


comms您可以使用从列中获得的掩码来索引数据框。

>>> import pandas as pd
>>> df = pd.DataFrame({'comms': ['bad', 'good', 'ok'], 'date': ['1', '15', '17']})
>>> df
  comms date
0   bad    1
1  good   15
2    ok   17
>>> df[df.comms.str.contains('good')]
  comms date
1  good   15
>>> df[df.comms.str.contains('d')]
  comms date
0   bad    1
1  good   15
>>>

详细地说,这里的掩码是将索引映射到真/假条件的系列,如下所示:

>>> m = df.comms.str.contains('good')
0    False
1     True
2    False
Name: comms, dtype: bool

然后,当您使用它来索引数据框时,只会选择与掩码匹配的行:

>>> df[m]
  comms date
1  good   15

对于多个单词:

  • 您可以将掩码与逻辑运算符合并:
>>> df[df.comms.str.contains('go') | df.comms.str.contains('k')]
  comms date
1  good   15
2    ok   17
  • 您还可以对包含使用正则表达式模式:
>>> df[df.comms.str.contains('go|k', regex=True)]
  comms date
1  good   15
2    ok   17

推荐阅读