2015-02-23 19 views
31

Python'da çok büyük bir veri çerçevem ​​var ve belirli bir sütunda belirli bir dizgi olan tüm satırları bırakmak istiyorum. Örneğin, "XYZ" dizgisi olan tüm satırları, veri çerçevesinin C sütununa bir alt dizgi olarak bırakmak istiyorum. Örneğin, Şekil 'ı tıklatın. Belirli bir sütunda belirli bir dizeyi içeren pandalar veri çerçevesinden satırlar nasıl bırakılır?

Bu, .drop() yöntemini kullanarak etkili bir şekilde uygulanabilir mi?

cevap

50

pandalar dize işlemlerini vectorized verdi, bu yüzden sadece istemediğiniz dize içeren satırları filtreleyebilirsiniz:

In [91]: df = pd.DataFrame(dict(A=[5,3,5,6], C=["foo","bar","fooXYZbar", "bat"])) 

In [92]: df 
Out[92]: 
    A   C 
0 5  foo 
1 3  bar 
2 5 fooXYZbar 
3 6  bat 

In [93]: df[df.C.str.contains("XYZ") == False] 
Out[93]: 
    A C 
0 5 foo 
1 3 bar 
3 6 bat 
+18

ne yazmış doğru ve daha okunabilir olmasına rağmen, daha kısa bir yöntem olacaktır: 'df [~ df.C.str.contains ("XYZ") ] – EdChum

15

dize kısıt sadece bir dize o gelen satırları bırakabilirsiniz değilse ile:

df = df[~df['your column'].isin(['list of strings'])] 

yukarıdaki tam dizeleri karşılaştırmak istiyorsanız Bu yalnızca çalışacaktır listenizdeki

+0

Bunun tersini nasıl yaparsınız? Sütun değerinin herhangi bir dizeyi içerip içermediğini kontrol etmek istiyorum. sözdizimi: 'list_of_strings dizesi için, sütun içeriyorsa ' – radtek

+1

' yi temizleyin." ~ " df = df [df ['your column']. isin (['list of string'])] – ksooklall

+0

, ama teşekkürler – radtek

5

unsurlarını içeren tüm satırları düşecek. Sütun dizesinin listedeki dizelerden herhangi birini içerip içermediğini kontrol etmek istediğinizde işe yaramaz. Bir liste ile karşılaştırmak doğru yolu olacaktır:

searchfor = ['john', 'doe'] 
    df = df[~df.col.str.contains('|'.join(searchfor))] 
İlgili konular