Tengo un Pandas DataFrame con una columna 'fecha'. Ahora necesito filtrar todas las filas en el DataFrame que tienen fechas fuera de los próximos dos meses. Esencialmente, solo necesito retener las filas que están dentro de los próximos dos meses.
¿Cuál es la mejor manera de lograr esto?
query
aquí también.df.query('20130101 < date < 20130201')
..loc
y.ix
) y las columnas en sus ejemplos no son equivalentes.df.ix['2014-01-01':'2014-02-01']
incluye2014-02-01
mientrasdf[(df['date'] > '2013-01-01') & (df['date'] < '2013-02-01')]
que no incluye2013-02-01
, solo coincidirá con filas de hasta2013-01-31
.La respuesta anterior no es correcta en mi experiencia, no puede pasarle una cadena simple, debe ser un objeto de fecha y hora. Entonces:
fuente
Y si sus fechas están estandarizadas al importar el paquete datetime, simplemente puede usar:
Para estandarizar su cadena de fecha usando el paquete datetime, puede usar esta función:
fuente
df[(df['date']>pd.Timestamp(2016,1,1)) & (df['date']<pd.Timestamp(2016,3,1))]
.Si su columna de fecha y hora tiene el tipo de fecha y hora de Pandas (p
datetime64[ns]
. Ej. ), Para un filtrado adecuado necesita el objeto pd.Timestamp , por ejemplo:fuente
Si las fechas están en el índice, simplemente:
fuente
Puede usar pd.Timestamp para realizar una consulta y una referencia local
con la salida
Eche un vistazo a la documentación de pandas para DataFrame.query , específicamente la mención sobre el
@
prefijo de udsing referenciado de variable local . En este caso, hacemos referencia alpd.Timestamp
uso del alias localts
para poder proporcionar una cadena de marca de tiempofuente
Entonces, al cargar el archivo de datos csv, necesitaremos establecer la columna de fecha como índice ahora como se muestra a continuación, para filtrar los datos en función de un rango de fechas. Esto no era necesario para el método ahora obsoleto: pd.DataFrame.from_csv ().
Si solo desea mostrar los datos durante dos meses de enero a febrero, por ejemplo, 2020-01-01 a 2020-02-29, puede hacerlo:
Esto ha sido probado trabajando para Python 3.7. Espero que encuentres esto útil.
fuente
index_col
tiene que ser unastring
no una lista.mydata = pd.read_csv('mydata.csv',index_col='date')
¿Qué tal usar
pyjanitor
Tiene características geniales.
Después
pip install pyjanitor
fuente
La forma más corta de filtrar su marco de datos por fecha: supongamos que su columna de fecha es el tipo de fecha y hora64 [ns]
fuente
Todavía no tengo permitido escribir ningún comentario, así que escribiré una respuesta, si alguien los lee todos y llega a este.
Si el índice del conjunto de datos es una fecha y hora y desea filtrarlo solo por (por ejemplo) meses, puede hacer lo siguiente:
Eso filtrará el conjunto de datos en marzo.
fuente
Si ya ha convertido la cadena a un formato de fecha usando pd.to_datetime, puede usar:
df = df[(df['Date']> "2018-01-01") & (df['Date']< "2019-07-01")]
fuente
Puede seleccionar el rango de tiempo haciendo: df.loc ['start_date': 'end_date']
fuente