Pandas: 通过忽略大小写检查列值(转换大小写)
Pandas: check column values by ignoring cases (convert cases)
我正在尝试使用以下条件检查 pandas 列的值:
my_df[my_df.name.str.contains('MY_TARGET')]
这很好用。但由于我需要将名称列转换为大写,我做了以下但没有奏效:
my_df[my_df.name.str.upper.contains('MY_TARGET')]
通过忽略大小写来执行列值检查的正确方法是什么?谢谢!
选项 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.contains
(import re
先)
In [1282]: my_df[my_df.name.str.contains('MY_TARGET', flags=re.I)]
Out[1282]:
name
0 my_target
3 My_TarGet
我认为您应该使用如下所示的方法链。 .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
您可以简单地使用 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
我正在尝试使用以下条件检查 pandas 列的值:
my_df[my_df.name.str.contains('MY_TARGET')]
这很好用。但由于我需要将名称列转换为大写,我做了以下但没有奏效:
my_df[my_df.name.str.upper.contains('MY_TARGET')]
通过忽略大小写来执行列值检查的正确方法是什么?谢谢!
选项 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.contains
(import re
先)
In [1282]: my_df[my_df.name.str.contains('MY_TARGET', flags=re.I)]
Out[1282]:
name
0 my_target
3 My_TarGet
我认为您应该使用如下所示的方法链。 .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
您可以简单地使用 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