Tengo algunas columnas en mi marco de datos para las que solo quiero mantener la parte de la fecha y eliminar la parte de la hora. He hecho una lista de estas columnas:
list_of_cols_to_change = ['col1','col2','col3','col4']He escrito una función para hacer esto. Toma una lista de columnas y aplica dt.date a cada columna de la lista.
def datefunc(x): for column in x: df[column] = df[column].dt.dateLuego llamo a esta función pasando la lista como parámetro:
datefunc(list_of_cols_to_change )Quiero lograr esto usando algo como map(). Básicamente, use una función que tome una columna como parámetro y realice cambios en ella. Luego quiero usar map() para aplicar esta función a la lista de columnas que tengo. Algo como esto:
def datefunc_new(column): df[column] = df[column].dt.date map(datefunc_new,list_of_cols_to_change)Sin embargo, esto no funciona. ¿Cómo puedo hacer que esto funcione?
Lo más simple es usar la función lambda con apply :
df = pd.DataFrame({'col1':pd.date_range('2015-01-02 15:00:07', periods=3), 'col2':pd.date_range('2015-05-02 15:00:07', periods=3), 'col3':pd.date_range('2015-04-02 15:00:07', periods=3), 'col4':pd.date_range('2015-09-02 15:00:07', periods=3), 'col5':[5,3,6], 'col6':[7,4,3]}) print (df) col1 col2 col3 \ 0 2015-01-02 15:00:07 2015-05-02 15:00:07 2015-04-02 15:00:07 1 2015-01-03 15:00:07 2015-05-03 15:00:07 2015-04-03 15:00:07 2 2015-01-04 15:00:07 2015-05-04 15:00:07 2015-04-04 15:00:07 col4 col5 col6 0 2015-09-02 15:00:07 5 7 1 2015-09-03 15:00:07 3 4 2 2015-09-04 15:00:07 6 3 list_of_cols_to_change = ['col1','col2','col3','col4'] df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(lambda x: x.dt.date) print (df) col1 col2 col3 col4 col5 col6 0 2015-01-02 2015-05-02 2015-04-02 2015-09-02 5 7 1 2015-01-03 2015-05-03 2015-04-03 2015-09-03 3 4 2 2015-01-04 2015-05-04 2015-04-04 2015-09-04 6 3Creo que ya tiene la solución, solo agregue la column como parámetro a su función datefunc_new :
def datefunc_new(column): df[column] = df[column].dt.date map(datefunc_new, list_of_cols_to_change)También puede usar un código más parecido a pandas para su ejemplo específico:
def to_date(series): return series.dt.date df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(to_date)