【问题标题】:Select row with regex instead of unique value使用正则表达式而不是唯一值选择行
【发布时间】:2019-11-30 22:31:22
【问题描述】:

大家好,我正在 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 Different的回答

代码如下所示

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])

【问题讨论】:

    标签: regex python-3.x pandas


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢这是正确的答案代码在我的情况下看起来像这样,顺便说一句,你能解释一下'import re'是什么意思吗?祝你好运!
    • re 是 Python 的正则表达式模块。在这个答案中,我需要 re.escape 函数(以防用户输入一些奇怪的名称,如 ^John - 我们需要清理它)和 re.IGNORECASE(这只是一个 int 但比输入幻数更好)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多