Estoy encontrando algunos problemas al usar el método . between en Python.
Tengo un conjunto de datos simple que consta de ~ 59000 registros
El formato de fecha es DD/MM/AAAA y me gustaría filtrar los días del mes de abril del año 2014.
psi_df = pd.read_csv('thecsvfile.csv') psi_west_df = psi_df[['24-hr_psi','west']] april_records = psi_west_df[psi_west_df['24-hr_psi'].between('1/4/2014','31/4/2014')] april_records.head(100)Recibí el resultado por el cual la fecha salta repentinamente del 4/3/2014 (3 de abril) al 4/10/2014 (10 de abril). Este patrón se repite para cada mes y cada año hasta el año 2020 (el último año de este conjunto de datos), que no era mi intención original de obtener los datos del mes de abril del año 2014.
Como todavía soy bastante nuevo en python, decidí realizar algunas correcciones en Excel. Separé las columnas de fecha y hora y volví a ejecutar el código con la sintaxis necesaria actualizada. 
psi_df = pd.read_csv('psi_new.csv') psi_west_df = psi_df[['date','west']] april_records = psi_west_df[psi_west_df['date'].between('1/4/2014','31/4/2014')] april_records.head(100)Todavía enfrenté el mismo problema y ahora, estoy totalmente perplejo en cuanto a por qué ocurre esto. ¿Estoy usando el método . between incorrectamente? Buscando la amable orientación e instrucciones de todos sobre por qué ocurre esto. Muy apreciado y muchas gracias a todos.
El archivo csv que estoy usando se puede obtener de este sitio web: https://data.gov.sg/dataset/historical-24-hr-psi
El primer problema es que su columna de fecha no es una fecha sino una columna de objeto.
Asegúrese de que su columna sea realmente una fecha usando la función pandas to_datetime .
psi_west_df['date'] = pd.to_datetime(psi_west_df['date'], format='%d/%m/%Y') Después de que la columna sea realmente una columna de fecha para que la función between se ejecute sin problemas, debe darle dos objetos de fecha y no un objeto de cadena como este:
start_day = pd.to_datetime('1/4/2014', format='%d/%m/%Y') end_day = pd.to_datetime('30/4/2014', format='%d/%m/%Y') april_records = psi_west_df[psi_west_df['date'].between(start_day, end_day)]Así que todos juntos:
psi_df = pd.read_csv('psi_new.csv') psi_west_df = psi_df[['date','west']] psi_west_df['date'] = pd.to_datetime(psi_west_df['date'], format='%d/%m/%Y') start_day = pd.to_datetime('1/4/2014', format='%d/%m/%Y') end_day = pd.to_datetime('30/4/2014', format='%d/%m/%Y') april_records = psi_west_df[psi_west_df['date'].between(start_day, end_day)] april_records.head(100)Nota : este código debería funcionar en los datos después de cambiarlo con Excel, lo que significa que tiene una columna separada para datos y tiempo.