Python - Distribuir los datos almacenados en una columna de Dataframe en distintas columnas (H:M:S)

 
Vista:
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Distribuir los datos almacenados en una columna de Dataframe en distintas columnas (H:M:S)

Publicado por María (22 intervenciones) el 19/07/2020 17:29:19
Hola,

Tengo el siguiente problema: He creado un dataframe para almacenar la información. En la columna LMST esta el tiempo al que le he quitado el texto que lleva delante de cada hora, pero ahora me interesa dividir los datos de esta columna en tres columnas. Es decir, los datos en la columna los tengo en formato H:M:S, pero quiero tener en el propio dataframe tres columnas, la de H, la de M y la de S. ¿puede por favor ayudarme alguien?

La idea es después los segundos y las horas pasarlos a minutos, y sumar todos los minutos, para finalmente tener una columna de minutos. Si podéis ayudar lo agradeceria.
Gracias

Dejo aquí mi código (aviso que soy muy novata en esto y estoy aprendiendo por mi cuenta):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd
read_file=pd.read_excel(r'/home/maria/Escritorio/scripts/presion.xls')
read_file.to_csv (r'/home/maria/Escritorio/scripts/presion.csv',index= None, header=True)
 
data_df=pd.DataFrame(read_file)
 
#print('data frame'+'\n'+str(data_df))
 
presion_df=data_df['P_10Hz']
LMST_df=data_df['LMST'].str.extract('(..:..:......)')
 
data_df['LMST']=LMST_df
print(data_df.iloc[0,0])
data_df['H']=data_df['LMST'].str.split(":")
print(data_df)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 388
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Distribuir los datos almacenados en una columna de Dataframe en distintas columnas (H:M:S)

Publicado por Daniel (111 intervenciones) el 19/07/2020 20:09:54
Hola,

En pandas el algo relativamente sencillo. Hay que usar la función split de str que tiene todos los dataframes con la opción expand. Lo que crea un nuevo con los datos deseados. Posteriormente hay concatenar los dos dataframe horizontalmente, para lo que es necesario indica el eje.

1
2
3
4
5
6
7
8
9
10
import pandas as pd
 
# Creamos un dataframe
df = pd.DataFrame(['10:11:12', '12:13:14'])
 
# Con las funciones str se puede crear un nuevo DataFrame
df2 = df[0].str.split(":", expand=True)
 
# Ahora solo hay que concatenar por
pd.concat([df, df2], axis=1)

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 68
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Distribuir los datos almacenados en una columna de Dataframe en distintas columnas (H:M:S)

Publicado por María (22 intervenciones) el 20/07/2020 01:43:40
Muchas gracias Daniel Rodriguez, me has ayudado!, espero que te guste lo que he aprendido a raiz de tu ayuda y es:

Al hacer esto, he aprendido que las columnas que se crean en el dataframe ya concatenado no tienen nombre y automáticamente aparecen en el cabecero nombras con 0 1 y 2. Al querer cambiar los nombres con la tercera linea de código de las líneas que aquí dejo,

1
2
3
4
data_df3=pd.concat([data_df,data_df2],axis=1)
print('Segundos'+'\n'+str(data_df3.iloc[:,4]))
 
data_df3.rename(columns={'0':'H','1':'M','2':'S'},inplace=True)

me he dado cuenta que tal como lo pongo en la tercera linea no sale debido a que son números, esta forma sólo funciona si las columnas están nombradas con letras (o cualquier nombre). Y haciendo pruebas me he dado cuenta que sale bien si quitas las comillas a los números, es decir, lo correcto sería:

1
data_df3.rename(columns={0:'H',1:'M',2:'S'},inplace=True)

De esta forma ya tengo mi dataframe original con las dos columnas originales con su cabecero, y las nuevas columnas obtenidas de la concatenación, a partir de la cual no se nombraban como yo queria, con el nombre que yo quiero (es decir, H, M.S).

Un saludo,
María R.P.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar