python - 如何根据另一个csv文件中的关键字提取csv文件中的句子并将其从主文件中删除
问题描述
我有 2 个 csv 文件,其中一个包含如下所示的句子
你好吗
我要死
我在家
我去上班睡觉
他名声不好
是我去找他
回家睡个好觉
另一个 csv 文件包含频率如下所示的单词
词频
和 500
你450
我 300
有 250
你的 240
睡眠 200
工作 150
家 100
死 50
我正在尝试根据频率在 300 到 100 之间的单词将句子提取到新的 csv 文件中,并在从主 csv 文件中提取后删除该句子,因为有时在搜索新关键字或单词时会发生重复,即是我设法构建的代码,但没有给我想要的输出:
import sys
import pandas as pd
import re
import string
if len(sys.argv) == 1:
print("please provide a CSV file to analys")
else:
fileinput = sys.argv[1]
dic = sys.argv[2]
wdata = pd.read_csv(fileinput, nrows=0).columns[0]
skip = int(wdata.count(' ') == 0)
wdata = pd.read_csv(fileinput, names=['sentences'], skiprows=skip)
data = wdata['sentences'].str.replace('[^\w\s]', ' ')
keywords=pd.read_csv(dic)
keywords=keywords.loc[keywords['freq'].between(100, 300, inclusive=False), 'word']
df1 = data[data['sentences'].str.split(expand=True).isin(keywords).any(axis=1)]
#deleted rows by keywords
df2 = data[~data['sentences'].str.split(expand=True).isin(keywords).any(axis=1)]
print(df1)
而且我不知道如何在提取后删除主文件中的句子,我期望的输出是这样的
解决方案
我认为您需要Series.between
选择关键字:
keywords=keywords.loc[keywords['freq'].between(100, 300, inclusive=False), 'word']
print (keywords)
3 have
4 your
5 sleep
6 work
Name: word, dtype: object
然后选择 bySeries.str.split
和DataFrame.isin
withDataFrame.any
df1 = data[data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (df1)
3 I went to sleep at work
6 have a good sleep home
Name: sentences, dtype: object
#deleted rows by keywords
df2 = data[~data.str.split(expand=True).isin(keywords.tolist()).any(axis=1)]
print (df2)
0 how are you
1 I want to die
2 I was home
4 he has a bad reputation
5 it was me who went to him
Name: sentences, dtype: object
推荐阅读
- ios - 如何对sceneView中节点的子节点进行hitTest?
- postgresql - 导入到 postgres 时从 CSV 中删除封闭的双括号
- javascript - 将模块变量切换为实例变量
- ruby - 用 Ruby 计算日期
- python - 字体显示期间的Pygame问题
- amazon-web-services - 通过远程桌面连接到 AWS EC2 实例
- php - PhpStorm 无法进行结构替换
- php - 在子文件夹中上传时,Laravel Passport 不起作用
- android - 如何访问 MediaBrowserServiceCompat 服务的实例?
- r - If语句作为R中的向量/子集