Soru pandalar veri çerçevesi sütununda dize olup olmadığını kontrol edin


Böyle bir çerçevem ​​varsa

frame = pd.DataFrame({'a' : ['the cat is blue', 'the sky is green', 'the dog is black']})

ve bu satırlardan herhangi birinin belirli bir kelime içerdiğini kontrol etmek istiyorum. Bunu yapmak zorundayım.

frame['b'] = frame.a.str.contains("dog") | frame.a.str.contains("cat") | frame.a.str.contains("fish")

frame['b'] çıktılar:

True
False
True

Bir liste yapmaya karar verirsem

mylist =['dog', 'cat', 'fish']

Satırların listede belirli bir kelime içerdiğini nasıl kontrol edebilirim?


25
2017-07-31 14:18


Menşei


Kabul edilen cevaptaki yöntem, örneğin, 'orada' kelimesiyle 'bu' alt dizisini bulacaktır. Bir yöntem bulmak için kesin kelimeler burada görmek: Dizgiler sütununda tam kelimeyi bularak yeni bir sütun oluşturma - Georgy


Cevaplar:


str.contains yöntem düzenli bir ifade kalıbı kabul eder:

In [11]: pattern = '|'.join(mylist)

In [12]: pattern
Out[12]: 'dog|cat|fish'

In [13]: frame.a.str.contains(pattern)
Out[13]:
0     True
1    False
2     True
Name: a, dtype: bool

50
2017-07-31 14:31



Bu, yaptığım şeyi önemli ölçüde hızlandırıyor. Alt deseni geri döndürmenin herhangi bir yolu var mı ( köpek) Doğru Yanlış yerine eşleşti mi? - zelusp
Figür çıktı: eşleştirilen desen kullanımını döndürmek için frame.a.str.extract(pattern) - zelusp


Liste çalışması için

print frame[frame['a'].isin(mylist)]     

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.isin.html


3
2018-02-09 14:11



Bu, bir listeden potansiyel olarak bir alt dizgi arıyorsanız bile çalışır mı? Yani, 'a' sütununun herhangi bir alt dizesini, mylist'teki herhangi bir öğeyle eşleştirmek istiyorsanız, bunu yakalayacak mı? - HaPsantran
Hayır, alt dizeler için çalışmıyor. Sadece tüm dizeyle eşleşir ve büyük / küçük harfe duyarlıdır. - Goutham Anush