2017-01-18 3 views
2

申し訳ありません、私は実際に複数の文字を含む部分文字列を探していますので、私の質問を編集する必要がありました。提案された答えは良いですが、たいていは1つの文字列に対して機能します。サブストリングAまたはBの列に基づいてデータフレームから行を選択してください

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 

は、私はどちらかの「柱」や「通り」を含むすべての行を選択するためのエレガントな方法はあり

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

     A B 
0 ju1 1 
1 abjul 3 

で「柱」を含むすべての行を選択することができます知っていますか?

これは次のように機能しますが、他の方法でも機能しますか?

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

'試験〔試験[ 'A']をテストする。str.contains( '[JS ] + ')] ' – MaxU

+0

test [(test [' A ']。str.contains(' j '))| (テスト[テスト['A']。str.contains( 's')])] – flyingmeatball

答えて

1

オプション1
str.match

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

オプション2
set操作

を使用してみてください

オプション

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] 
を放送numpyで3

set操作

全収率

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

時間

enter image description here

2
In [13]: test.loc[test.A.str.contains(r'[js]')] 
Out[13]: 
     A B 
0  j1 1 
1  j4 2 
2 abjul 3 
5  s1 6 
6 asep 7 
関連する問題