代码之家  ›  专栏  ›  技术社区  ›  ozgur

过滤熊猫数据帧时如何使用lower()方法?

  •  1
  • ozgur  · 技术社区  · 7 年前
                 0         1         2         3         4         5
    word                                                            
    </s>  0.001129 -0.000896  0.000319  0.001534  0.001106 -0.001404
    in    0.070312  0.086914  0.087891  0.062500  0.069336 -0.108887
    for  -0.011780 -0.047363  0.044678  0.063477 -0.018188 -0.063965
    that -0.015747 -0.028320  0.083496  0.050293 -0.110352  0.031738
    is    0.007050 -0.073242  0.171875  0.022583 -0.132812  0.198242
    

    我有这个数据框架,我想得到索引(“word”)包含特定字符串(大小写不变)的行。我试过了

    df[df.index.str.lower().contains("lebron") == True]
    

    它给出 KeyError: False . 虽然

    df[df.index.str.contains("Lebron") == True]
    

    工作良好。

    如何使用 lower() 在这种情况下?

    2 回复  |  直到 7 年前
        1
  •  3
  •   cs95 abhishek58g    7 年前

    建议不要使用regex比较(即,不要使用 str.lower 使用regex)进行简单的子字符串检查。您可以在这里使用列表理解:

    df[['lebron' in x.lower() for x in df.index]]
    

    如果索引中可能存在nan,则可以修改解决方案来处理它们:

    df[[pd.notna(x) and 'lebron' in x.lower() for x in df.index]]
    

    没有正则表达式, str.contains 可相应地使用:

    df[df.index.str.lower().str.contains("lebron", regex=False)]
    

    拖尾 == True 如果你没有奶奶,可以省略。否则,

    df[df.index.str.lower().str.contains("lebron", regex=False) == True]
    

    工作会很好。

        2
  •  3
  •   jezrael    7 年前

    lower 这里不是必需的,添加参数 case=False 在里面 str.contains 用于非区分大小写的搜索和 na=False 如果可能,还缺少值 regex=False 如果没有regex搜索:

    df[df.index.str.contains("lebron", case=False)]
    
    df[df.index.str.contains("lebron", case=False, na=False, regex=False)]
    

    但如果你想要的话,只能用链子 str.lower() 具有 str.contains() ,也与 True 不需要:

    df[df.index.str.lower().str.contains("lebron")]
    
    df[df.index.str.lower().str.contains("lebron", na=False, regex=False)]