gpt4 book ai didi

python-3.x - 使用 Pandas 过滤具有多个值的单元格中的字符串

转载 作者:行者123 更新时间:2023-12-03 18:32:08 25 4
gpt4 key购买 nike

我正在使用 Pandas 使用 str.contains() 过滤数据框,但我的逻辑正在删除我可能想要保留给字符串的值。我不知道如何使用 Pandas 来解决这个问题。

我正在使用的 Excel 工作表中的示例单元格如下所示:

案例 #1:不要因为有不同的收件人 bob@gmail.com 而标记它

Recipient
---------
joe@work.com, bob@gmail.com, sally@work.com

案例2:标记此为因为每个收件人都包含@ work.com
Recipient
---------
mike@work.com, taylor@work.com, barbra@work.com

我有一种情况,如果出现特定值,我只需要它来过滤。
例如,如果“收件人”包含电子邮件 joe@work.com,请删除此值。但是,如果收件人列包含“joe@work.com, bob@gmail.com”(是的,值以逗号分隔,就像在单个单元格中一样。)并保留它。最终,此数据框将从最终报告中删除。所以我想删除只包含@work.com 的所有内容,但如果它包含@gmail.com、@work.com,则不要删除。

即使收件人列包含“gmail.com”,下面的查询也会删除所有内容
df['EMAIL10'] = df['Type'].str.contains('Email') & df['Type'].str.contains(
'Tracking | Data') & df[
'Recipient'].str.contains('@work.com')

让我知道是否需要澄清

最佳答案

您可以创建一个 bool 掩码,指示 all 单独的单词是否包含 '@work'

首先,split 将每个单词放入一个单独的单元格中,explode 将把它变成一个大系列,索引复制并指向原始 DataFrame 的索引。 .str.contains 检查您的条件,all(level=0) 检查原始数据帧中一行中的每个单词是否为真。

import pandas as pd

df = pd.DataFrame({'col': ['joe@work.com, bob@gmail.com, sally@work.com',
'mike@work.com, taylor@work.com, barbra@work.com']})

df['all_work'] = df['col'].str.split(', ').explode().str.contains('@work').all(level=0)
print(df)
col all_work
0 joe@work.com, bob@gmail.com, sally@work.com False
1 mike@work.com, taylor@work.com, barbra@work.com True

为了说明,在 split 和 explode 之后,我们有:
df['col'].str.split(', ').explode()

0 joe@work.com
0 bob@gmail.com # Each item split separately
0 sally@work.com
1 mike@work.com
1 taylor@work.com
1 barbra@work.com
#|
#Index corresponds to Index of the original DataFrame

关于python-3.x - 使用 Pandas 过滤具有多个值的单元格中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62199414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com