Soru "değil" durumuna göre veri çerçevesinden satırları bırakarak


Tarih sütununun değeri tarihler listesinde olduğunda, pandaların veri çerçevesinden satırları bırakmak istiyorum. Aşağıdaki kod çalışmıyor:

a=['2015-01-01' , '2015-02-01']

df=df[df.datecolumn not in a]

Aşağıdaki hatayı alıyorum:

ValueError: Bir Serinin gerçek değeri belirsizdir. A.empty, a.bool (), a.item (), a.any () veya a.all () kullanın.


20
2018-01-15 14:10


Menşei




Cevaplar:


Kullanabilirsiniz pandas.Dataframe.isin.

pandas.Dateframe.isin her öğenin listede olup olmamasına bağlı olarak boolean değerlerini döndürür a ya da değil. Sonra bunu tersine çevirirsiniz ~ dönüştürmek True için False ve tersi.

import pandas as pd

a = ['2015-01-01' , '2015-02-01']

df = pd.DataFrame(data={'date':['2015-01-01' , '2015-02-01', '2015-03-01' , '2015-04-01', '2015-05-01' , '2015-06-01']})

print(df)
#         date
#0  2015-01-01
#1  2015-02-01
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

df = df[~df['date'].isin(a)]

print(df)
#         date
#2  2015-03-01
#3  2015-04-01
#4  2015-05-01
#5  2015-06-01

36
2018-01-15 14:16



çalışır .. teşekkür ederim - gaurav gurnani


Kullanabilirsiniz isin:

df = df[~df.datecolumn.isin(a)]

Hata mesajı all() veya any() kullanılabilir, yalnızca sonucu bir Boole değerine indirmek istediğinizde kullanışlıdırlar. Ancak, şu an yapmaya çalıştığınız şey değil, yani Seri'deki tüm değerlerin üyeliğini dış listeye karşı test etmek ve sonuçları bozulmadan saklamak (yani, daha sonra orijinal DataFrame'i dilimlemek için kullanılacak bir Boole Dizisi) ).

Bu konuda daha fazla okuyabilirsiniz Sorunlar.


11
2018-01-15 14:15



O çalıştı .. Teşekkür ederim - gaurav gurnani