2016-04-02 19 views
1

bir sütun gibi:python - pandalar veri dizesi dize arama - ";" ile ilgili sorunlar? ile dataframe olması

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

i

giriş 'G3UX74' (3th satırda) gibi olduğunda çok iyi çalışır
df[df['Proteins'].str.contains('Users input', na=False) 

gitmek dizeleri bakmak istiyorum, ve ayrıca 'Q8CCS6' için, ancak örneğin ';Q8CCS6' veya tam dizgiyi aradığımda değil: "G3UX74; G3UY42; Q8CCS6".

Ben girdi dizesi tek şey istenmeyen boşlukları kaldırmak için yazdırılabilir öğeler için subsetine geçerli:

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

Yani ben o ile ilgili bir sorun olduğunu tahmin ';'. Noktalı virgül kullanmama konusunda bir uyarı uygulayabilirim ancak esnek olmasını isterim. Python 1/0 olarak temsil edildiği isprintable döner Doğru/Yanlış, çünkü

cevap

0

Sen, giriş dizesi printable karakter sayısı özetliyor gibidir:

:

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 

Yani bu şekilde deneyelim

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 

Açıklama:

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

evet ama bu ölçütü: SEARCH_STRING = sararmış ch_string [: no_space_in_string] Aynı dizeyi geri alıyorum, sadece kullanıcının girebileceği alanları kaldırmak mı, yoksa? – user5875384

+0

@ user5875384, hayır - bu şekilde sadece dizginizi dilimleyeceksiniz, bu yüzden sadece belirli koşullar altında çalışacaktır – MaxU

+0

teşekkürler! Daha önce değiştirmeyi ('', '') denedim, ancak daha önce bir giriş widget'ındaki boşlukları kaldırmak için etkin değildi. Ama umarım bir şekilde is.printable() 'ın özetlemesini engelleyebiliriz. açıklama için teşekkürler! – user5875384