熊猫:忽略案例(转换案例)检查列值

时间:2017-08-04 00:19:35

标签: python-3.x pandas uppercase

我正在尝试使用以下条件检查pandas列的值:

my_df[my_df.name.str.contains('MY_TARGET')]

这很好用。但由于我需要将name列转换为大写,我执行了以下操作但不起作用:

my_df[my_df.name.str.upper.contains('MY_TARGET')]

通过忽略案例来执行列值检查的正确方法是什么?谢谢!

3 个答案:

答案 0 :(得分:6)

您只需使用case = False参数即可。

df = pd.DataFrame({'name': ['my_target', 'foo', 'bar', 'My_TarGet']}) #Coldspeed data
df[df['name'].str.contains('my_target', case=False)]

输出:

       name
0  my_target
3  My_TarGet

答案 1 :(得分:3)

我认为您应该使用如下方法链。 .uppper()作为方法(括号)和以下.str方法的附加.contains()访问者。

my_df[my_df.name.str.upper().str.contains('MY_TARGET')]

实施例

import pandas as pd

df = pd.DataFrame(['a'])
print(df[df[0].str.upper().str.contains('A')])

   0
0  a

答案 2 :(得分:1)

选项1

使用df.apply(str.upper)

转换为大写
In [1283]: my_df = pd.DataFrame({'name': ['my_target', 'foo', 'bar', 'My_TarGet']})

In [1279]: my_df[my_df.name.apply(str.upper).str.contains('MY_TARGET')]
Out[1279]: 
        name
0  my_target
3  My_TarGet

对于这种情况,您可以指定regex=False以获得额外的加速。

选项2

使用正则表达式标记re.I(忽略大小写)与df.str.containsimport re优先)

In [1282]: my_df[my_df.name.str.contains('MY_TARGET', flags=re.I)]
Out[1282]: 
        name
0  my_target
3  My_TarGet