繁体   English   中英

在Python中删除具有特定条件的行

[英]Delete rows with certain conditions in Python

我正在使用适用于Python的Twitter搜索API对Twitter消息的特定关键字进行研究。

现在,我有一个很大的CSV文件,其中包含包含此关键字以及用户名中包含关键字的邮件。 因此,这些消息与关键字无关,关键字恰好在用户名中。

例:

  • 我的csv中有一个错误的行: @Koningsbruggen发推文:@CGCommunicatie你们在“关键字”中吗?

  • 我的csv中有不正确的行:@“ KEYWORD” _lady发推文:@rvanbommel是,没关系

如何使用Python代码删除后一行? 我有一个包含12万行的csv,因此最好自动删除这些不正确的行。

如果您的输入文件是消息的逐行列表:

ATamsterdam_lady tweeted: ATrvanbommel ja dikke vlokken
ATKoningsbruggen tweeted: ATCGCommunicatie zitten jullie in Amsterdam?
ATJustoRasta tweeted: febovers ... AT Leidseplein - Amsterdam Centrum t.co/KCUCzj2dWq
AT7Ash_bash tweeted: #HENNY AND AMSTERDAM TONIGHT

然后,您可以使用以下Python代码:

input_file = 'twitter.txt'
output_file = 'result.txt'
keyword = 'Amsterdam'

with open(input_file) as f:
    lines = f.readlines()

for line in lines:
    message = line.split('tweeted: ')[1]
    if keyword.lower() in message.lower():
        with open(output_file, 'a') as myfile:
            myfile.write(line)

生成的输出文件包含逐行文本,仅在“消息”部分包含“阿姆斯特丹”:

ATKoningsbruggen tweeted: ATCGCommunicatie zitten jullie in Amsterdam?
ATJustoRasta tweeted: febovers ... AT Leidseplein - Amsterdam Centrum t.co/KCUCzj2dWq
AT7Ash_bash tweeted: #HENNY AND AMSTERDAM TONIGHT

如果您将推文加载到pandas数据框中,则可以非常轻松,快速地对其进行过滤:

In [11]:

df = pd.DataFrame({'tweet':['@Koningsbruggen tweeted: @CGCommunicatie are you guys in "KEYWORD"?', '@"KEYWORD"_lady tweeted: @rvanbommel yes thats okay']})
df
Out[11]:
                                               tweet
0  @Koningsbruggen tweeted: @CGCommunicatie are y...
1  @"KEYWORD"_lady tweeted: @rvanbommel yes thats...

我们可以调用向量化str方法来split推文并使用contains对其进行过滤:

In [25]:

df[df.tweet.str.split('tweeted:').str[1].str.contains('KEYWORD')]
Out[25]:
                                               tweet
0  @Koningsbruggen tweeted: @CGCommunicatie are y...

有很多方法可以将数据加载到熊猫中: http : //pandas.pydata.org/pandas-docs/stable/io.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM