我有一个简单的数据框如下:
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
如果我执行以下命令
df=df[df['ConfigredValue']!=dfs['ReferenceValue']]
然后我得到如下
0 24-Jun-17 False FALSE
2 26-Jun-17 TRUE FALSE
4 28-Jun-17 false FALSE
但我希望过滤器不区分大小写(case = False)
我想要关注输出:
2 26-Jun-17 TRUE FALSE
请建议,如何获取过滤不区分大小写的数据(case = false)
答案 0 :(得分:3)
最简单的方法是在检查相等性之前将两列转换为低位(或高位):
df=df[df['ConfigredValue'].str.lower()!=df['ReferenceValue'].str.lower()]
或
df=df[df['ConfigredValue'].str.upper()!=df['ReferenceValue'].str.upper()]
输出:
Out:
Last Known Date ConfigredValue ReferenceValue
2 2 26-Jun-17 TRUE FALSE
在这个特殊情况下,您可以简单地比较TRUE和True的长度,它们与字符串大写或小写相同:
df[df['ConfigredValue'].str.len()!=df['ReferenceValue'].str.len()]
输出:
Out:
Last Known Date ConfigredValue ReferenceValue
2 2 26-Jun-17 TRUE FALSE
str.title()
,这里是它的矢量化版本:
df[df['ConfigredValue'].str.title()!=df['ReferenceValue'].str.title()]
对速度进行基准测试表明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
答案 1 :(得分:3)
最好用' FALSE'使用case = False
参数即
df['ConfigredValue'] = df['ConfigredValue'].str.replace('false','FALSE',case=False)
df=df[df['ConfigredValue']!=df['ReferenceValue']]
输出:
Last Known_Date ConfigredValue ReferenceValue 2 2 26-Jun-17 TRUE FALSE
答案 2 :(得分:2)
看起来这些列包含#! /usr/bin/env node
var shell = require('shelljs');
var userArgs = process.argv.slice(2);
var folderName = userArgs[0];
var Spinner = require('cli-spinner').Spinner;
var depSpin = new Spinner('Installing dependencies.. %s');
var spawn = require('child_process').spawn;
var commandsDep = [
'cd ' + folderName,
'npm init -y',
'npm install --save babel-core babel-loader babel-preset-es2015 babel-preset-react react-dom react-redux redux webpack',
'npm install --save-dev babel-preset-env webpack-dev-server'
];
var depChild = spawn(commandsDep.join(' && '), {
shell: true
});
depSpin.setSpinnerString(18);
shell.mkdir(folderName);
shell.cd(folderName);
depSpin.start();
depChild.on('exit', () => {
depSpin.stop();
shell.exec('clear');
console.log('Installing dependencies.. ✓');
})
shell.touch('webpack.config.js');
shell.mkdir(['build', 'frontend']);
shell.cd('frontend');
shell.mkdir(['components', 'containers', 'reducers', 'store']);
shell.touch('app.js');
shell.cd('containers');
shell.touch(['AppContainer.js', 'Root.js']);
shell.cd('../reducers');
shell.touch('index.js');
shell.cd('../store');
shell.touch('configureStore.js');
值,如果将列转换为boolean
数据类型不是问题,那么以下也可以正常工作(其中boolean
用于将字符串的第一个字符更改为大写,例如将FALSE更改为False,或将true更改为True,然后将其转换为相应的布尔值):
.title()
然后,使用与上面相同的比较:
df['ConfigredValue'] = df['ConfigredValue'].apply(lambda row: eval(row.title()))
df['ReferenceValue'] = df['ReferenceValue'].apply(lambda row: eval(row.title()))
输出:
df[df['ConfigredValue'] != df['ReferenceValue']]
或者,只使用类似于大写或小写的标题:
Last Known Date ConfigredValue ReferenceValue
2 26-Jun-17 True False
答案 3 :(得分:1)
在框外
pandas.read_csv
以布尔值的形式读取所有这些内容。您可以转储到csv并再次读取它。然后,您可以使用pd.DataFrame.query
pd.read_csv(pd.io.common.StringIO(df.to_csv(index=False))).query(
'ConfigredValue != ReferenceValue')
Last Known Date ConfigredValue ReferenceValue
2 26-Jun-17 True False