使用Pandas Python时我遇到了一个基本问题。例如我的Dataframe" a"有以下列q,w,e,r。现在我想拍一个。
的子集b=a[[w,e,r,z]]
但它不会创建一个子集,因为z不在a中,请帮助我如何处理这个问题,尽管没有找到z" a"数据框,我想" b"与其余人一起创建w,e,r。
答案 0 :(得分:1)
使用isin
方法似乎不是最有效的方法:
% timeit a[a.columns[a.columns.isin(['w', 'e', 'r', 'z'])]]
out : 1000 loops, best of 3: 528 µs per loop
当您使用过滤器时:
%timeit a[[col for col in ['w','e','r','z'] if col in a.columns]]
out: 1000 loops, best of 3: 431 µs per loop
另一方面,使用isin
自动重新索引列,例如创建数据框:
a = pd.DataFrame({'q':[1],'w':[2],'e':[3],'r':[4]})
out: e q r w
0 3 1 4 2
a[a.columns[a.columns.isin(['w', 'e', 'r', 'z'])]]
out : e r w
0 3 4 2
a[[col for col in ['w','e','r','z'] if col in a.columns]]
out: w e r
0 2 3 4
答案 1 :(得分:0)
您可以在编制索引之前进行手动过滤:
filtered_col = [col for col in [w,e,r,z] if col in a.columns]
b = a[filtered_col]
答案 2 :(得分:0)
IIUC您可以使用a
列mask = a.columns[a.columns.isin([w, e, r, z])]
b = a[mask]
方法来实现这一目标:
np.random.seed(632)
df = pd.DataFrame(np.random.randn(5, 4), columns = list('abcd'))
In [56]: df
Out[56]:
a b c d
0 -0.202506 1.245011 0.628800 -1.787930
1 -1.076415 0.603727 -1.242478 0.430865
2 -1.689979 0.885975 -1.408643 0.545198
3 -1.351751 -0.095847 1.506013 1.454067
4 -1.081069 -0.162412 -0.141595 -1.180774
mask = df.columns[df.columns.isin(['a', 'b', 'c', 'e'])]
In [57]: mask
Out[57]: Index(['a', 'b', 'c'], dtype='object')
In [58]: df[mask]
Out[58]:
a b c
0 -0.202506 1.245011 0.628800
1 -1.076415 0.603727 -1.242478
2 -1.689979 0.885975 -1.408643
3 -1.351751 -0.095847 1.506013
4 -1.081069 -0.162412 -0.141595
示例:强>
$.admin_panel = {
menu: {
product: function(product_uuid) {
console.log('product');
$(document.createElement('ul'))
.attr({
'id' : 'admin_panel-product-'+ product_uuid
})
.addClass('admin_panel_menu')
.append(
$(document.createElement('li'))
.append(
$(document.createElement('a'))
.attr({
'href' : '{backend url}/'+ product_uuid,
'target' : '_Blank'
})
.html('Edit via backend')
)
)
.appendTo('body');
$.admin_panel.tricker.bindEvent('#admin_panel-product-'+ product_uuid);
$.admin_panel.tricker.mousedownEvent('#admin_panel-product-'+ product_uuid);
$.admin_panel.tricker.clickEvent('#admin_panel-product-'+ product_uuid);
}
},
tricker: {
bindEvent: function(menu_id) {
console.log('bindEvent');
$('.admin_panel').bind('contextmenu', function (event) {
// event.preventDefault();
$(menu_id).finish().toggle(100).
css({
top: event.pageY + "px",
left: event.pageX + "px"
});
});
},
mousedownEvent: function(menu_id) {
console.log('mousedownEvent');
$(document).bind("mousedown", function (e) {
if (!$(e.target).parents(menu_id).length > 0) {
$(menu_id).hide(100);
}
});
},
clickEvent: function(menu_id) {
console.log('clickEvent');
$(menu_id +" li").click(function(){
$(menu_id).hide(100);
});
}
},
run: function() {
console.log('Admin panel run! :)');
$.each($('.admin_panel'), function(index, value) {
switch(true) {
case $(value).hasClass('admin_panel_product'):
$.admin_panel.menu.product($(value).data('product-uuid'));
break;
}
});
}
};