过滤字符串,后跟随机的数字行

时间:2019-04-29 11:20:01

标签: python pandas

我想在数据框中过滤一行。

ch=b611067=football

我的问题是我只想过滤b'611067部分。

我知道我可以使用跟随str.startswith('b')来查找ID的开头,但是我正在寻找一种说诸如str.contains('random 6 digit numberical value'之类的方式

希望这很有道理。

2 个答案:

答案 0 :(得分:2)

我还不确定(如何)在熊猫中有效地做到这一点,但是您可以使用正则表达式进行匹配:

import re

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

编辑:此答案说明了如何将正则表达式与熊猫一起使用: How to filter rows in pandas by regex

答案 1 :(得分:1)

您可以使用$patterns = ["'}}","jpg","png","jpeg","gif"]; $replacements = ["","jpg'}}","png'}}","jpeg'}}","gif'}}"]; $row["value"] = str_replace($patterns, $replacements, $row["value"]); 访问器在字符串列上使用字符串函数,包括通过正则表达式进行匹配:

.str

输出:

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 匹配的行,则可以使用tobias_k提供的表达式:

b<6 numbers>

请注意,这产生的结果与df.foo.str.match(r'.+=b[0-9]{6}=.+') 相同,它不需要您提供通配符,并且是How to filter rows in pandas by regex中给出的解决方案,但正如Pandas docs中提到的那样, df.foo.str.contains(r'=b611067=')您可以更加严格。