如果熊猫的数据框中有某些值,我想排除它们。
excluded_url_subpath = ['/editer', '/administration', '/voir-les-transactions', '/modifier', '/diffuser', '/creation-paiement']
所以我有一个可行的解决方案,可以像这样一个接一个地完成它:
df = df[df['pagepath'].map(lambda x: False if '/editer' in x else True)]
df = df[df['pagepath'].map(lambda x: False if '/administration' in x else True)]
...
或者我可以使用我写的清单。但是我尝试了一些方法,IDE告诉我无法访问变量x
。
df = df[df['pagepath'].map(lambda x: False for i in excluded_url_subpath if x in i)]
这里的错误在哪里?
答案 0 :(得分:2)
您可以使用正则表达式,我构建了一个示例数据框:
import pandas as pd
data = {'pagepath': ['/editer', 'to_keep', 'to_delete/editer/to_delete', 'hello/voir-les-transactions', 'to_keep'],
'year': [2012, 2012, 2013, 2014, 2014],
'reports': [4, 24, 31, 2, 3]}
df = pd.DataFrame(data, index = ['Cochice', 'Pima', 'Santa Cruz', 'Maricopa', 'Yuma'])
print(df)
使用先前的代码,我们构建了以下数据集:
pagepath year reports
Cochice /editer 2012 4
Pima to_keep 2012 24
Santa Cruz to_delete/editer/to_delete 2013 31
Maricopa hello/voir-les-transactions 2014 2
Yuma to_keep 2014 3
现在,我将解决方案从this answer调整到适合您的情况。首先,为了实现通用解决方案,我转义了excluded_url_subpath
列表中的字符串可以包含的可能的非字母数字字符。
import re
excluded_url_subpath = ['/editer', '/administration', '/voir-les-transactions', '/modifier', '/diffuser', '/creation-paiement']
safe_excluded_url_subpath = [re.escape(m) for m in excluded_url_subpath]
现在,使用contains
函数,我使用|
构建了一个正则表达式,将您的列表加入其中:
df[~df.pagepath.str.contains('|'.join(safe_excluded_url_subpath))]
我获得了以下数据框:
pagepath year reports
Pima to_keep 2012 24
Yuma to_keep 2014 3
答案 1 :(得分:1)
您可以通过过滤数据框来做到这一点,例如:
const jsonServer = require('json-server');
const server = jsonServer.create();
const _ = require('lodash')
const router = jsonServer.router('./db.json');
const middlewares = jsonServer.defaults();
const port = process.env.PORT || 3000;
server.use(middlewares);
server.use(jsonServer.bodyParser)
server.use(jsonServer.rewriter({
'/api/products': '/products'
}));
server.post('/api/productcollection', (req, res) => {
const db = router.db; // Assign the lowdb instance
if (Array.isArray(req.body)) {
req.body.forEach(element => {
insert(db, 'products', element); // Add a post
});
}
else {
insert(db, 'products', req.body); // Add a post
}
res.sendStatus(200)
/**
* Checks whether the id of the new data already exists in the DB
* @param {*} db - DB object
* @param {String} collection - Name of the array / collection in the DB / JSON file
* @param {*} data - New record
*/
function insert(db, collection, data) {
const table = db.get(collection);
if (_.isEmpty(table.find(data).value())) {
table.push(data).write();
}
}
});
server.use(router);
server.listen(port);