Tengo dos df grandes de dos hojas de cálculo xlsx y me gustaría fusionarlos 'en' datos de marca de tiempo ['Hora'].

El problema es que un conjunto de datos ha registrado el tiempo en segundos decimales y el otro en segundos enteros. Esto significa que las dos teclas del conjunto de datos ['Tiempo'] nunca coinciden ...

df1     Time                                 df2     Time
0       00:07:53.755000                      0       00:07:53
1       00:07:54.096000                      1       00:07:54
2       00:07:55.097000                      2       00:07:55
3       00:07:56.099000                      3       00:07:56
4       00:07:57.002000                      4       00:07:57
5       00:07:58.012000                      5       00:07:58

Intenté modificar los formatos de hora en Excel, pero siempre conserva el valor de milisegundos debido a su fracción de 24 horas. Necesito eliminar los segundos decimales de df1 (¡o simplemente hacer que coincidan de alguna manera!) Para permitir la coincidencia con los datos de fila de df2 y espero que haya una manera mucho más simple de hacer esto en python.

Gracias a todos y cada uno de los consejos!

3
MDS 27 feb. 2018 a las 02:44

3 respuestas

La mejor respuesta

Esta es una forma de hacer esto.

# convert time to str and remove millisecond
df1['Time'] = df1['Time'].astype(str)
df1['Time'] = df1['Time'].str.replace('\..*','')

# Just to be sure there are no error because of timeformat
df2['Time'] = df2['Time'].astype(str)

# now we can join
df3 = pd.merge(df1, df2, on='Time')
-1
YOLO 26 feb. 2018 a las 23:59

Usaría pandas strftime

df1['Time'] = pd.to_datetime(df1['Time']).dt.strftime('%H:%M:%S')
df2['Time'] = pd.to_datetime(df2['Time']).dt.strftime('%H:%M:%S')

merged = pd.merge(df1, df2, on='Time')
1
noslenkwah 27 feb. 2018 a las 14:03

En df1, puede establecer microsegundos en 0:

df1['Time'] = pd.to_datetime(df1['Time']).apply(lambda x: x.replace(microsecond=0))

Luego realice su fusión como de costumbre.

1
jpp 27 feb. 2018 a las 14:08