字符串过滤器后接随机数行

2024-09-30 01:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在数据帧中筛选一行。你知道吗

ch=b611067=football

我的问题是我只想过滤b'611067部分。你知道吗

我知道我可以用follow str.startswith('b')来找到ID的开头,但是我要找的是一种类似str.contains('random 6 digit numberical value'的方式

希望这有意义。你知道吗


Tags: 数据idvalue方式randomch意义digit
2条回答

我还不确定如何在熊猫中有效地做到这一点,但你可以使用regex进行匹配:

import re

pattern = '(b\d{6})'
text = 'ch=b611067=football'
matches = re.findall(pattern=pattern, string=text)
for match in matches:
    pass # do something

编辑:这个答案解释了如何将regex与pandas一起使用: How to filter rows in pandas by regex

可以使用.str访问器对字符串列使用字符串函数,包括通过regexp进行匹配:

import pandas as pd
df = pd.DataFrame(data={"foo": ["us=b611068=handball", "ch=b611067=football", "de=b611069=hockey"]})
print(df.foo.str.match(r'.+=b611067=.+'))

输出:

0    False
1     True
2     False
Name: foo, dtype: bool

您可以使用它来索引数据帧,例如:

print(df[df.foo.str.match(r'.+=b611067=.+')])

输出:

                   foo
1  ch=b611067=football

如果希望所有行都与模式b<6 numbers>匹配,可以使用tobias\u k提供的表达式:

df.foo.str.match(r'.+=b[0-9]{6}=.+')

注意,这与df.foo.str.contains(r'=b611067=')给出的结果相同,它不要求您提供通配符,是How to filter rows in pandas by regex中给出的解决方案,但正如Pandas docs中所述,使用match可以更严格。你知道吗

相关问题 更多 >

    热门问题