He estado tratando de cambiar la fecha de la columna de pandas con el tiempo que tiene segundos en formato flotante para hacer cierta fecha. Pero no pude hacerlo funcionar.

Mi intento hasta ahora:

import numpy as np
import pandas as pd

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})


df['date'] = '2013-09-01 00:00:' + df['time'].astype(str)
df['date2'] = pd.to_datetime(df['date'],format='%Y-%m-%d %H:%M%-S') # this fails

df

Referencia: http://strftime.org/

No pude encontrar el formato de cadena para mi tiempo. Como resolver el problema. Agradezco la ayuda.

Pregunta

Por defecto, pandas da el 1 de enero de 1970 como fecha, ¿cómo hacer que el 1 de septiembre de 2013?

Actualizar

También probé esto

df['date'] = pd.to_datetime(df['time'], unit='s')
df['date2'] = pd.to_datetime('2013-09-01')
df['date3'] = df['date'].dt + df['date2'].dt

Aún no hay suerte.

0
MilkyWay001 7 oct. 2019 a las 02:22

3 respuestas

La mejor respuesta

Use directamente to_timedelta para agregar con to_datetime

pd.to_datetime('2013-09-01') + pd.to_timedelta(df.time, unit='s')

Out[19]:
0   2013-09-01 00:00:01.000
1   2013-09-01 00:00:02.000
2   2013-09-01 00:00:03.000
3   2013-09-01 00:01:00.000
4   2013-09-01 00:02:00.100
5   2013-09-01 00:02:00.200
Name: time, dtype: datetime64[ns]
2
Andy L. 7 oct. 2019 a las 04:51

Puedes usar pandas Timedelta para esto:

import numpy as np
import pandas as pd

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})


df['date'] = pd.to_datetime('2013-09-01') + pd.Series([pd.Timedelta(t, unit='s') for t in df['time']])

print(df)

Salida:

    time                    date
0    1.0 2013-09-01 00:00:01.000
1    2.0 2013-09-01 00:00:02.000
2    3.0 2013-09-01 00:00:03.000
3   60.0 2013-09-01 00:01:00.000
4  120.1 2013-09-01 00:02:00.100
5  120.2 2013-09-01 00:02:00.200

Para más referencias visite: https://pandas.pydata.org/pandas -docs / stable / user_guide / timedeltas.html

1
Poudel 7 oct. 2019 a las 00:17

Dados sus datos, primero debe crear una columna date y analizarla como una fecha y hora predeterminada y luego encontrar el delta.

Puede usar la biblioteca datetime de Python para este trabajo:

import numpy as np
import pandas as pd
from datetime import datetime, timedelta

df = pd.DataFrame({'time': [1.0,2.0,3.0,60.0,120.1,120.2]})
df['date'] = datetime.strptime('2013-09-01 00:00:00', '%Y-%m-%d %H:%M:%S')
df['date2'] = df.apply(lambda row: row.date - timedelta(seconds=row.time), axis=1)

Espero que ayude.

1
khan 6 oct. 2019 a las 23:41
58262008