¿Cómo fusionar dos columnas de DataFrame y aplicarle pandas.to_datetime?

Estoy aprendiendo a usar pandas, a usarlo para un análisis de datos. Los datos se suministran como un archivo csv, con varias columnas, de las cuales solo necesito usar 4 (fecha, hora, o, c). Me gustaría crear un nuevo DataFrame, que utiliza como índice un número DateTime64, este número se está creando al combinar las dos primeras columnas, aplicando pd.to_datetime en la cadena combinada.

Mi código de cargador funciona bien:

st = pd.read_csv("C:/Data/stockname.txt", names=["date","time","o","h","l","c","vol"]) 

El desafío es convertir el DataFrame cargado en uno nuevo, con el formato correcto. Lo de abajo funciona pero es muy lento. Además, solo hace una columna con el nuevo formato datetime64, y no lo hace el índice.

Mi código

 st_new = pd.concat([pd.to_datetime(st.date + " " + st.time), (st.o + st.c) / 2, st.vol], axis = 1, ignore_index=True) 

¿Cuál sería una forma más python de combinar dos columnas y aplicar una función en el resultado? ¿Cómo hacer que la nueva columna sea el índice del DataFrame?

Puedes hacer todo en la función read_csv :

 pd.read_csv('test.csv', parse_dates={'timestamp': ['date','time']}, index_col='timestamp', usecols=['date', 'time', 'o', 'c']) 

parse_dates le dice a la función read_csv que combine la columna de date y time en una columna de timestamp y la analice como una marca de tiempo. (Los pandas son lo suficientemente inteligentes como para saber cómo analizar una fecha en varios formatos)

index_col establece la columna de timestamp como el índice.

usecols le dice a la función read_csv que seleccione solo el subconjunto de las columnas.

En cuanto a cargar los datos, creo que lo tienes. Para establecer el índice haga esto:

 st_new = pd.concat([(st.o + st.c) / 2, st.vol], axis=1, ignore_index=True) st_new.set_index(pd.to_datetime(st.date + " " + st.time), drop=True, inplace=True) 

Aquí está la documentación de la API para set_index .