根据列中的子字符串A或B从数据框中选择行

时间:2017-01-18 19:20:23

标签: python python-2.7 pandas substring

抱歉,我需要编辑我的问题,因为我实际上正在查找包含多个字符的子字符串。建议的答案很好,但主要适用于一个字符串。

import panda as pd

test = pd.DataFrame({'A': 'ju1 j4 abjul boy noc s1 asep'.split(),
                 'B': [1, 2, 3, 4, 5, 6, 7]})
print(test)


       A  B
0    ju1  1
1     j4  2
2  abjul  3
3    boy  4
4    noc  5
5     s1  6
6   asep  7

我知道我可以选择包含' ju'与

subset = test[test['A'].str.contains('ju')]
print(subset)

       A  B
0    ju1  1
1  abjul  3

是否有一种优雅的方式可以选择包含' ju'或' as'?

这有效,如下所示,还有其他方法吗?

ju = test.A.str.contains('ju')
as = test.A.str.contains('as')
subset = test[ju | as]

2 个答案:

答案 0 :(得分:2)

function handleFileSelect(evt) {
    var files = evt.target.files;
    for (var i = 0, f; f = files[i]; i++) {
        if (!f.type.match('image.*')) {
            continue;
        }
        var reader = new FileReader();
        reader.onload = (function(theFile) {
                return function(e) {
                    var span = document.createElement('span');
                    span.innerHTML = ['<img class="thumb" src="', e.target.result, '"
                        title = "', escape(theFile.name), '" / > '].join('
                        ');
                        document.getElementById('list').insertBefore(span, null);
                    };
                })(f); reader.readAsDataURL(f);
        }
    }
    document.getElementById('files').addEventListener('change', handleFileSelect, false);

答案 1 :(得分:1)

选项1
尝试使用str.match

test[test.A.str.match('.*[js].*')]

选项2
set次操作

s = test.A.apply(set)
test[s.sub(set(list('js'))).lt(s)]

选项3
set广播的numpy次广告

s = test.A.apply(set)
test[(~(np.array([[set(['j'])], [set(['s'])]]) - s.values).astype(bool)).any(0)]

选项4
单独的条件

cond_j = test.A.str.contains('j')
cond_s = test.A.str.contains('s')
test[cond_j | cond_s]

所有收益

       A  B
0     j1  1
1     j4  2
2  abjul  3
5     s1  6
6   asep  7

时间测试

enter image description here