熊猫按两列值过滤行,不区分大小写

Pyt*_*ark 4 python pandas

我有一个简单的数据框,如下所示:

Last Known Date ConfigredValue  ReferenceValue
0   24-Jun-17   False   FALSE
1   25-Jun-17   FALSE   FALSE
2   26-Jun-17   TRUE    FALSE
3   27-Jun-17   FALSE   FALSE
4   28-Jun-17   false   FALSE
Run Code Online (Sandbox Code Playgroud)

如果我执行以下命令

df=df[df['ConfigredValue']!=dfs['ReferenceValue']]

然后我得到如下

0   24-Jun-17   False   FALSE
2   26-Jun-17   TRUE    FALSE
4   28-Jun-17   false   FALSE
Run Code Online (Sandbox Code Playgroud)

但我想要不区分大小写的过滤器(case = False)

我想要以下输出:

2   26-Jun-17   TRUE    FALSE
Run Code Online (Sandbox Code Playgroud)

请建议,如何过滤不区分大小写的数据(case=false)

Moh*_*OUI 6

选项 1:转换为小写或大写并进行比较

最简单的是在检查相等之前将两列转换为较低(或较高):

df=df[df['ConfigredValue'].str.lower()!=df['ReferenceValue'].str.lower()]
Run Code Online (Sandbox Code Playgroud)

或者

df=df[df['ConfigredValue'].str.upper()!=df['ReferenceValue'].str.upper()]
Run Code Online (Sandbox Code Playgroud)

输出:

Out: 
  Last Known Date ConfigredValue ReferenceValue
2    2  26-Jun-17           TRUE          FALSE
Run Code Online (Sandbox Code Playgroud)

选项 2:比较长度

在这种特殊情况下,您可以简单地比较 TRUE 和 True 的长度,无论字符串是大写还是小写,它们都相同:

df[df['ConfigredValue'].str.len()!=df['ReferenceValue'].str.len()]
Run Code Online (Sandbox Code Playgroud)

输出:

Out: 
  Last Known Date ConfigredValue ReferenceValue
2    2  26-Jun-17           TRUE          FALSE
Run Code Online (Sandbox Code Playgroud)

选项 3:矢量化标题

str.title() 在@0p3n5ourcE 答案中也提出了建议,这是它的矢量化版本:

df[df['ConfigredValue'].str.title()!=df['ReferenceValue'].str.title()]
Run Code Online (Sandbox Code Playgroud)

执行时间处理时间

对速度进行基准测试表明str.len()速度要快一些

In [35]: timeit df[df['ConfigredValue'].str.lower()!=df['ReferenceValue'].str.lower()]
1000 loops, best of 3: 496 µs per loop

In [36]: timeit df[df['ConfigredValue'].str.upper()!=df['ReferenceValue'].str.upper()]
1000 loops, best of 3: 496 µs per loop

In [37]: timeit df[df['ConfigredValue'].str.title()!=df['ReferenceValue'].str.title()]
1000 loops, best of 3: 495 µs per loop

In [38]: timeit df[df['ConfigredValue'].str.len()!=df['ReferenceValue'].str.len()]
1000 loops, best of 3: 479 µs per loop
Run Code Online (Sandbox Code Playgroud)