python - functions - soltar filas del marco de datos en función de una condición "no en"
python pandas download windows (2)
Quiero soltar filas de un marco de datos de pandas cuando el valor de la columna de fecha está en una lista de fechas. El siguiente código no funciona:
a=[''2015-01-01'' , ''2015-02-01'']
df=df[df.datecolumn not in a]
Obtuve el siguiente error:
ValueError: el valor de verdad de una serie es ambiguo. Use a.empty, a.bool (), a.item (), a.any () o a.all ().
Puedes usar
pandas.Dataframe.isin
.
pandas.Dateframe.isin
devolverá valores booleanos dependiendo de si cada elemento está dentro de la lista o no.
Luego invierte esto con el
~
para convertir
True
a
False
y viceversa.
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
Puedes usar
Series.isin
:
df = df[~df.datecolumn.isin(a)]
Si bien el mensaje de error sugiere que se puede usar
all()
o
any()
, solo son útiles cuando desea reducir el resultado en un único valor booleano.
Sin embargo, eso no es lo que está tratando de hacer ahora, que es probar la pertenencia de todos los valores de la Serie a la lista externa y mantener los resultados intactos (es decir, una Serie Booleana que luego se utilizará para cortar el Marco de Datos original) )
Puedes leer más sobre esto en las Gotchas .