首页 > 解决方案 > 如何根据另一个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)


而且我不知道如何在提取后删除主文件中的句子,我期望的输出是这样的

在此处输入图像描述

标签: pythonstringpandascsv

解决方案


我认为您需要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.splitDataFrame.isinwithDataFrame.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

推荐阅读