【问题标题】:regex case insensitive filtering of columns in pandas大熊猫中列的正则表达式不区分大小写过滤
【发布时间】:2015-07-26 04:41:45
【问题描述】:

我正在尝试使用 Python 在 python 中匹配 csv 文件中的字符串(列),但它不匹配任何内容。我希望字符串匹配不区分大小写。我很新,但这是我试图做的

test = pd.read_csv("data.csv")
mytest= pd.DataFrame(test, columns=[re.search("[a-zA-Z1-9_]", "columnname1", re.IGNORECASE),])
print(mytest)

我们将不胜感激任何帮助

【问题讨论】:

    标签: csv python-3.x pandas


    【解决方案1】:

    如果我了解您的目的,您可以 filter 您的 df 仅返回名称匹配的列并使其不区分大小写:

    In [298]:
    
    df = pd.DataFrame({'columnname1':np.arange(5), 'ColumnName1':np.arange(5), 'columnname2':0, 'column name 1':0})
    df
    Out[298]:
       ColumnName1  column name 1  columnname1  columnname2
    0            0              0            0            0
    1            1              0            1            0
    2            2              0            2            0
    3            3              0            3            0
    4            4              0            4            0
    
    In [299]:
    
    import re
    df.filter(regex=re.compile("columnname1", re.IGNORECASE))
    Out[299]:
       ColumnName1  columnname1
    0            0            0
    1            1            1
    2            2            2
    3            3            3
    4            4            4
    

    编辑

    仅匹配名称而不匹配其前面的单词,因此匹配“测试”而不是“我的测试”:

    In [52]:
    
    df = pd.DataFrame({'Test':np.arange(5), 'ColumnName1':np.arange(5), 'My Test':0, 'My column name 1':0})
    import re
    df.filter(regex=re.compile(r"^Test$", re.IGNORECASE))
    Out[52]:
       Test
    0     0
    1     1
    2     2
    3     3
    4     4
    

    所以^ 在 str 的开头查找“Test”,$ 标记要搜索的模式的结尾,有一个方便的cheat sheet

    【讨论】:

    • 谢谢,但我真正想要的是假设我将您在上面示例中放入的所有列都放在 csv 文件中,并且我只想检索其中一个(不区分大小写)。我该怎么办?如果区分大小写,我可以使用 mytest=pd.DataFrame(test, columns=["Columnname1"] 轻松做到这一点,但如果我改为使用 columns=["COLUMnNaMe1"] 怎么办?在这种情况下我该怎么办?因为那是我真正想做的事。谢谢
    • 您是否担心加载整个 csv 然后过滤?您可以首先通过从 csv 中读取一行来获取列列表,然后对其进行过滤并作为参数传递。所以cols=pd.read_csv(file_path, nrows=1) 然后将 cols 解析为我上面的代码 sn-p,然后使用它来加载那些列:df = pd.read_csv(file_path, usecols=filtered_cols)
    • 我担心的是,如果我想在文件中检索的内容写得不好,例如 COLUMNName1 而不是 Columnname1,如果我想打印,虽然 Columnname1 在文件中,但我得到 NaN ;所以区分大小写
    • 我不明白你的担忧,一旦你发现不区分大小写的匹配项,就像我向你展示的那样,然后有一个匹配列的列表,它就会正常工作。如果您的列名是唯一的,您可以对它们进行预处理并将列名全部小写,然后这将成为非问题
    • @EdChum 你的回答很好,谢谢;但是您的建议将打印 ColumnName1 column name 1 columnname1 。我担心的是,我想检索 ColumnName1,但我通过了 COLUMNname1,我希望能够检索 ColumnName1;当我在我的情况下使用您的示例时,它会检索任何具有 COLUMNname1 作为子字符串的列
    猜你喜欢
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多