2016-09-09 6 views
3

部分文字列が与えられました。データフレーム内の特定の列にあるすべての部分文字列の出現回数を調べる必要があります。関連datframeは次のようになり、このパンダデータフレームの部分文字列の集合の数を求める

training['concat'] 

    0 svAxu$paxArWAn 
    1 xvAxaSa$varRANi 
    2 AxAna$xurbale 
    3 go$BakwAH 
    4 viXi$Bexena 
    5 nIwi$kuSalaM 
    6 lafkA$upamam 
    7 yaSas$lipsoH 
    8 kaSa$AGAwam 
    9 hewumaw$uwwaram 
    10 varRa$pUgAn 
ストリングの私のセットはキーがストリングであると値は、彼らが発生すると確率である辞書は、ある

reg = {'anuBavAn':0.35, 'a$piwra':0.2 ...... 'piwra':0.7, 'pa':0.03, 'a':0.0005} 
    #The length of dicitioanry is 2000 

特に私はそれらを見つける必要があります2回以上出現する部分文字列

私はこのタスクを実行する次のコードを書いています。現在の実装が実行にかなりの時間を要しているのと同じように、より洗練されたpythonicやパンダ固有の方法がありますか?あなたが代わりにapplystr.containsを使用することができます

elites = dict() 
    for reg_pat in reg_: 
    count = 0 
    eliter = len(training[training['concat'].str.contains(reg_pat)]['concat']) 
    if eliter >=3: 
    elites[reg_pat] = reg_[reg_pat] 
+0

のですか? – Boud

+0

トレーニングは9000行と同じです –

答えて

2

、それが高速です:

reg_ = {'anuBavAn':0.35, 'a$piwra':0.2, 'piwra':0.7, 'pa':0.03, 'a':0.0005} 

elites = dict() 
for reg_pat in reg_: 
    if training['concat'].apply(lambda x: reg_pat in x).sum() >= 3: 
     elites[reg_pat] = reg_[reg_pat] 

print (elites) 
{'a': 0.0005} 
+0

reg_patが正規表現パターンの場合、xのreg_patは機能しますか? –

+1

いいえ、それはその後仕事です。 regexの場合は 'str.contains'が必要です。 – jezrael

1

がうまくいけば、私が正しくあなたの質問を解釈しています。私は正規表現から離れようとしています(実際には、パンダと一緒に使用したことはありません)。厳密に言えば間違っているわけではありません。いずれにしても、正規表現操作は単純なinチェックよりも高速であるとは信じられませんが、間違っている可能性があります。

for substr in reg: 
    totalStringAppearances = training.apply((lambda string: substr in string)) 
    totalStringAppearances = totalStringAppearances.sum() 
    if totalStringAppearances > 2: 
     reg[substr] = totalStringAppearances/len(training) 
    else: 
     # do what you want to with the very rare substrings 

いくつかの落とし穴:

  • あなたは、これは動作しません、2を返すように「」「ABCDEFA」内の部分文字列のようなものを望んでいた場合。各文字列に部分文字列が存在するかどうかを確認するだけです。
  • apply()の中で、私はブール値の潜在的に信頼性のない利用を使用しています。詳細はthis questionを参照してください。

ポスト編集:Jezraelの答えは、同じ変数名を使用して、より完全です。しかし、正規表現の対applyinに関する単純なケースでは、私は彼の主張を検証し、そして私の推測:トレーニングはどのように大きな

enter image description here

関連する問題