JesúsMonroe
Estoy escribiendo un programa que verifica un archivo de Excel y si la fecha de hoy está en la columna de fecha del archivo de Excel, la analizo
Estoy usando:
cur_date = datetime.today()
para la fecha de hoy. Estoy comprobando si hoy está en la columna con:
bool_val = cur_date in df['date'] #evaluates to false
Sé con certeza que la fecha de hoy está en el archivo en cuestión. El tipo de serie es datetime64[ns]
Además, solo verifico la fecha en sí y no la marca de tiempo después, si eso importa. Estoy haciendo esto para hacer la marca de tiempo 00:00:00:
cur_date = datetime.strptime(cur_date.strftime('%Y_%m_%d'), '%Y_%m_%d')
Y el tipo de ese objeto después de la impresión también es fecha y hora.
Para cualquiera que también se topó con esto al comparar una fecha de marco de datos con una fecha variable, y esto no respondió exactamente a su pregunta; puedes usar el código de abajo.
En lugar de:
self.df["date"] = pd.to_datetime(self.df["date"])
Puede importar fecha y hora y luego agregar .dt.date al final como:
self.df["date"] = pd.to_datetime(self.df["date"]).dt.date
-
¡Sí, esto lo resuelve! +1
– mlcanales
1 abr 2022 a las 19:01
-
Creo que en los pandas modernos solo necesitas
.date
cuandoto_datetime
devuelve una marca de tiempo– tommy
30 de noviembre de 2022 a las 21:22
piRScuadrado
Puedes usar
pd.Timestamp('today')
o
pd.to_datetime('today')
Pero ambos dan la fecha y la hora para 'now'
.
Prueba esto en su lugar:
pd.Timestamp('today').floor('D')
o
pd.to_datetime('today').floor('D')
También podrías haber pasado el datetime
oponerse a pandas.to_datetime
pero me gusta la otra opcion mroe.
pd.to_datetime(datetime.datetime.today()).floor('D')
Pandas también tiene un Timedelta
objeto
pd.Timestamp('now').floor('D') + pd.Timedelta(-3, unit="D")
O puedes usar el offsets
módulo
pd.Timestamp('now').floor('D') + pd.offsets.Day(-3)
Para verificar la membresía, pruebe uno de estos
cur_date in df['date'].tolist()
O
df['date'].eq(cur_date).any()
-
¿Qué sucede si estuve verificando 3 días antes de la fecha actual? Lo hice hoy = hoy – timedelta (3) cuando era un objeto de fecha y hora
– Jesús Monroe
13 de agosto de 2018 a las 16:58
-
pd.Timestamp('today').floor('D') - pd.offsets.Day(3)
– piRSquared
13 de agosto de 2018 a las 16:59
-
¿Hay algún recurso sobre qué es exactamente
to_datetime
¿Va a aceptar? ¿Se reduce simplemente a un caso de prueba y error/leer la fuente? Los documentos parecen decir “arg: integer, float, string, datetime, list, tuple, 1-d array, Series”, que es… un poco extenso.– Rogan Josh
13 de agosto de 2018 a las 17:01
-
Eso lo resume todo. Por recurso, ¿te refieres a un documento que demuestre todo lo anterior?
– piRSquared
13 de agosto de 2018 a las 17:03
-
@piRSquared sí, tal vez esperaba demasiado, pero mi búsqueda no arrojó nada, así que lancé una última pregunta para ver si conocía un recurso específico.
– Rogan Josh
13 de agosto de 2018 a las 17:03
JerryMcDonald.dev
Al convertir el tipo datetime64 usando pd.Timestamp()
es importante tener en cuenta que debe compararlo con otro tipo de marca de tiempo. (no es un tipo datetime.date)
Convertir una fecha a numpy.datetime64
date="2022-11-20 00:00:00"
date64 = np.datetime64(date)
Hace siete días – tipo de marca de tiempo
sevenDaysAgoTs = (pd.to_datetime('today')-timedelta(days=7))
convertir date64 a Timestamp y ver si fue en los últimos 7 días
print(pd.Timestamp(pd.to_datetime(date64)) >= sevenDaysAgoTs)
-
Agregué esta respuesta porque en futuras versiones Timestamp y datetime.date se considerarán no comparables.
FutureWarning: Comparison of Timestamp with datetime.date is deprecated in order to match the standard library behavior. In a future version these will be considered non-comparable.
– JerryMcDonald.dev
23 de noviembre de 2022 a las 20:20