drop
Ücretsiz bir alternatif sunmak için @ User'ın genel çözümünü genişleteceğim . Bu, sorunun başlığına (OP'nin sorunu değil) dayalı olarak yönlendirilen kişiler içindir.
Negatif değerlere sahip tüm satırları silmek istediğinizi varsayalım. Bir astar çözümü: -
df = df[(df > 0).all(axis=1)]
Adım adım Açıklama: -
5x5 rastgele normal dağılım veri çerçevesi oluşturalım
np.random.seed(0)
df = pd.DataFrame(np.random.randn(5,5), columns=list('ABCDE'))
A B C D E
0 1.764052 0.400157 0.978738 2.240893 1.867558
1 -0.977278 0.950088 -0.151357 -0.103219 0.410599
2 0.144044 1.454274 0.761038 0.121675 0.443863
3 0.333674 1.494079 -0.205158 0.313068 -0.854096
4 -2.552990 0.653619 0.864436 -0.742165 2.269755
Durumun negatifleri silmesine izin verin. Durumu sağlayan bir boolean df: -
df > 0
A B C D E
0 True True True True True
1 False True False False True
2 True True True True True
3 True True False True False
4 False True True False True
Koşulu karşılayan tüm satırlar için bir boole serisi Satırdaki herhangi bir öğe, satır yanlış olarak işaretlenmiş koşulda başarısız olursa, Not
(df > 0).all(axis=1)
0 True
1 False
2 True
3 False
4 False
dtype: bool
Son olarak koşullara göre veri çerçevesindeki satırları filtreleyin
df[(df > 0).all(axis=1)]
A B C D E
0 1.764052 0.400157 0.978738 2.240893 1.867558
2 0.144044 1.454274 0.761038 0.121675 0.443863
Sen aslında hiç df için geri atayabilirsiniz silmek vs filtre üzerinde yapılan ing
df = df[(df > 0).all(axis=1)]
NaN içeren satırları filtrelemek için kolayca genişletilebilir (sayısal olmayan girişler): -
df = df[(~df.isnull()).all(axis=1)]
Bu, aşağıdaki gibi durumlar için de basitleştirilebilir: E sütununun negatif olduğu tüm satırları silin
df = df[(df.E>0)]
@ Kullanıcı drop
çözüm neden ham sütun tabanlı filtrasyon daha yavaş bazı profilleme istatistikleri ile bitirmek istiyorum : -
%timeit df_new = df[(df.E>0)]
345 µs ± 10.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
%timeit dft.drop(dft[dft.E < 0].index, inplace=True)
890 µs ± 94.9 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Bir sütun temelde olan Series
diğer bir deyişle NumPy
herhangi bir maliyet olmadan endekslenebilir, dizi. Temel bellek organizasyonunun yürütme hızına nasıl girdiğiyle ilgilenen insanlar için, burada Pandaları Hızlandırma ile ilgili harika bir Bağlantı :
df[[(len(x) < 2) for x in df['column name']]]
ama seninki çok daha hoş. Yardımınız için teşekkürler!