gpt4 book ai didi

python - 包含由 '|' 分隔的多个值的列中的 Pandas 字符串匹配

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:18 25 4
gpt4 key购买 nike

我有一个大型数据框,其中包含多个 ID 和值,如下所示:

示例数据框:

     ID        VALUE
0 5401 2003 | 5411
1 5582 2003
2 9991 62003
3 7440 1428 | 2003

**我只想获取数据框的子集,其中包含字符串列表中的一个元素。

l = [2003, 2005, 5411, 1786]

在上面的示例中,匹配“2003”的所有内容。**

预期结果:

     ID        VALUE
0 5401 2003 | 5411
1 5582 2003
3 7440 1428 | 2003

当前结果:

使用 df[df['VALUE'].str.contains('2003')] 给出所有内容,包括需要排除的 '62003'。

使用 df[df['VALUE'].str.match('2003')] 仅给出:

     ID        VALUE
0 5401 2003 | 5411
1 5582 2003

在这里,3 7440 1428 | 2003 丢失。

有没有办法获得完全匹配“2003”但位于“|”两侧的预期结果或在只有单个值且没有管道的行中。此结果还需要遍历要匹配的字符串列表。

任何指导表示赞赏。谢谢!

最佳答案

您可以使用正则表达式匹配:

import pandas as pd

data = [[5401, '2003 | 5411'],
[5582, '2003'],
[9991, '62003'],
[7440, '1428 | 2003']]

df = pd.DataFrame(data=data, columns=['id', 'value'])
result = df[df['value'].str.contains(r'\b2003\b', regex=True)]
print(result)

输出

     id        value
0 5401 2003 | 5411
1 5582 2003
3 7440 1428 | 2003

模式 '\b2003\b' 匹配被单词边界包围的 2003。如果您有多个模式,您还可以使用正则表达式匹配,例如:

import pandas as pd

data = [[5401, '2003 | 5411'],
[5582, '2003'],
[9991, '62003'],
[7440, '1428 | 2003'],
[7440, '2004 | 2002']]

needles = ['2003', '2004']
pattern = '|'.join([r'\b{}\b'.format(needle) for needle in needles])

df = pd.DataFrame(data=data, columns=['id', 'value'])
result = df[df['value'].str.contains(pattern, regex=True)]
print(result)

输出

     id        value
0 5401 2003 | 5411
1 5582 2003
3 7440 1428 | 2003
4 7440 2004 | 2002

另一种方法是在 | 上拆分字符串并检查每个值,例如:

needles = ['2003', '2004']

def contains(xs, ns=set(needles)):
return any(x.strip() in ns for x in xs.split('|'))


df = pd.DataFrame(data=data, columns=['id', 'value'])
result = df[df['value'].apply(contains)]
print(result)

输出

     id        value
0 5401 2003 | 5411
1 5582 2003
3 7440 1428 | 2003
4 7440 2004 | 2002

关于python - 包含由 '|' 分隔的多个值的列中的 Pandas 字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53986587/

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