首页 > 解决方案 > 使用正则表达式而不是唯一值选择行

问题描述

大家好,我在 pandas 数据框中进行了非常简单的查找,我需要做的是查找我输入为正则表达式而不是 == myvar 的输入

到目前为止,这就是我得到的,这是非常无用的,因为我的 DataFrame 中有很多名称,而不是匹配它们的列表,这可能是

Name         LastName
NAME 1       Some Awesome
Name 2       Last Names
Nam e 3      I can keep going
Bane         Writing this is awesome
BANE 114     Lets continue

然而,这就是我得到的

import pandas as pd
contacts = pd.read_csv("contacts.csv")
print("regex contacts")
nameLookUp = input("Type the name you are looking for: ")
print(nameLookUp)
desiredRegexVar = contacts.loc[contacts['Name'] == nameLookUp]
print(desiredRegexVar)

我必须输入 'NAME 1' 或 'Name e 3' 才能得到结果,否则我根本不会得到任何结果,我尝试使用它但它没有用

#regexVar = "^" + contacts.filter(regex = nameLookUp)

感谢@Code不同的回答

代码看起来像这样

import pandas as pd
import re
namelookup = input("Type the name you are looking for: ")
pattern = '^' + re.escape(namelookup)
match = contactos['Cliente'].str.contains(pattern, flags=re.IGNORECASE, na=False)
print(contactos[match])

标签: regexpython-3.xpandas

解决方案


使用Series.str.contains. 适当调整模式:

import re

pattern = '^' + re.escape(namelookup)
match = contacts['Name'].str.contains(pattern, flags=re.IGNORECASE)
contacts[match]

推荐阅读