python - 如何选择具有指定单词的字符串行?
问题描述
我有一个带有评论的数据库,我想创建另一个数据库,其中只有包含一些特定单词的评论。
我知道有一个类似的功能,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)
谢谢 !
解决方案
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
推荐阅读
- flutter - 如何从 VoidCallback 函数返回值
- python - 在 Windows 上使用 python 提交火花 - 远程主机强行关闭现有连接
- java - 带有继承的 Spring 自动装配
- python - 如何在不干扰整个服务器的情况下为 django 中的单个用户应用延迟?
- java - JTextArea(换行)作为 TableCellRender 到多个列
- python - 创建目录时的权限错误
- sql - 我应该如何加入这两个表?是外连接吗?
- javascript - Highcharts AreaRange Chart 与 xAxis 和最后一个数据点标签有关的问题
- c# - 如何根据 WinForms 中的 DataTable 值检查 CheckedListBox 中的项目?
- wordpress - 更新 WP 5.2.2 后操作初始化未触发