2016-04-02 19 views
1

コラムのような:python - pandasデータフレーム文字列検索 - ";"の問題?データフレームを持つ

Proteins 
Q64HY3 
G3UX74;G3UY42;Q8CCS6 
Q8BKC5 
O70209 
Q8BG32;G3UYI4;G3UYL3 

私は

入力が 'G3UX74'(第3回行)のようなものであるときに、非常にうまく動作します
df[df['Proteins'].str.contains('Users input', na=False) 

のために行くには文字列を見てみたいです、 'Q8CCS6'の場合もありますが、たとえば';Q8CCS6'や完全な文字列 'G3UX74; G3UY42; Q8CCS6'を検索しても表示されません。

私は入力文字列で行う唯一のことは、不要なスペースを削除するために、印刷可能なアイテムのためにサブセットすることです:

no_space_in_string = sum(c.isprintable() for c in search_string) 
search_string = search_string[:no_space_in_string] 

ので、私はそれが問題です推測します「;」。セミコロンを使わないという警告を出すことができますが、柔軟にしたいと思います。

答えて

0

Pythonで1/0として表されるTrue/Falseのisprintable戻りますので、あなたは、入力文字列にprintable文字の数を合計している:

In [107]: search_string 
Out[107]: ';Q8CCS6' 

In [108]: no_space_in_string = sum(c.isprintable() for c in search_string) 

In [109]: no_space_in_string 
Out[109]: 7 

は、それでは、このようにそれを試してみましょう:

In [112]: search_string = '; Q8CCS6' 

In [113]: search_string.replace(' ', '') 
Out[113]: ';Q8CCS6' 

In [114]: search_string = search_string.replace(' ', '') 

In [115]: search_string 
Out[115]: ';Q8CCS6' 

In [116]: df 
Out[116]: 
       Proteins 
0    Q64HY3 
1 G3UX74;G3UY42;Q8CCS6 
2    Q8BKC5 
3    O70209 
4 Q8BG32;G3UYI4;G3UYL3 

In [117]: df[df['Proteins'].str.contains(search_string, na=False)] 
Out[117]: 
       Proteins 
1 G3UX74;G3UY42;Q8CCS6 

説明:

In [135]: search_string = ';    Q8CCS6 ' 

In [136]: no_space_in_string = sum(c.isprintable() for c in search_string) 

In [137]: no_space_in_string 
Out[137]: 22 

In [138]: search_string[:no_space_in_string] 
Out[138]: ';    Q8CCS6 ' 

In [139]: ' '.isprintable() 
Out[139]: True 
+0

はいこれによって:SEARCH_STRING =焼け焦げch_string [:no_space_in_string]同じ文字列を返します。ユーザーが入力するスペースを削除するだけですか? – user5875384

+0

@ user5875384、いいえ - この方法で文字列をスライスするので、特定の状況下でのみ動作します – MaxU

+0

ありがとう!以前はreplace( ''、 '')を試していましたが、tkinterのEntryウィジェットからスペースを削除するのは効率的ではありませんでした。しかし、どうやらis.printable()の要約を避けることができれば幸いです。説明ありがとう! – user5875384

関連する問題