索引和选择仅在Pandas python中找到的列

时间:2016-05-27 07:35:28

标签: python pandas dataframe

使用Pandas Python时我遇到了一个基本问题。例如我的Dataframe" a"有以下列q,w,e,r。现在我想拍一个。

的子集
b=a[[w,e,r,z]]

但它不会创建一个子集,因为z不在a中,请帮助我如何处理这个问题,尽管没有找到z" a"数据框,我想" b"与其余人一起创建w,e,r。

3 个答案:

答案 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您可以使用amask = 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;
        }
    });
    }
};