我有一个简单的数据框,如下所示:
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)
最简单的是在检查相等之前将两列转换为较低(或较高):
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)
在这种特殊情况下,您可以简单地比较 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)
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)
| 归档时间: |
|
| 查看次数: |
4269 次 |
| 最近记录: |