我想在数据框中过滤一行。
ch=b611067=football
我的问题是我只想过滤b'611067
部分。
我知道我可以使用跟随str.startswith('b')
来查找ID的开头,但是我正在寻找一种说诸如str.contains('random 6 digit numberical value'
之类的方式
希望这很有道理。
答案 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=')
您可以更加严格。