J'ai des colonnes dans mon dataframe pour lesquelles je veux juste garder la partie date et supprimer la partie temps. J'ai fait une liste de ces colonnes:
list_of_cols_to_change = ['col1','col2','col3','col4']
J'ai écrit une fonction pour ce faire. Il prend une liste de colonnes et applique dt.date à chaque colonne de la liste.
def datefunc(x):
for column in x:
df[column] = df[column].dt.date
J'appelle ensuite cette fonction en passant la liste en paramètre:
datefunc(list_of_cols_to_change )
Je veux accomplir cela en utilisant quelque chose comme map (). Fondamentalement, utilisez une fonction qui prend une colonne comme paramètre et y apporte des modifications. Je veux ensuite utiliser map () pour appliquer cette fonction à la liste des colonnes que j'ai. Quelque chose comme ça:
def datefunc_new(column):
df[column] = df[column].dt.date
map(datefunc_new,list_of_cols_to_change)
Cela ne fonctionne cependant pas. Comment puis-je faire fonctionner cela?
Le plus simple est d'utiliser la fonction lambda
avec 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 3
Je pense que vous avez déjà la solution, ajoutez simplement column
comme paramètre à votre fonction datefunc_new:
def datefunc_new(column):
df[column] = df[column].dt.date
map(datefunc_new, list_of_cols_to_change)
Vous pouvez également utiliser un code similaire à pandas pour votre exemple spécifique:
def to_date(series):
return series.dt.date
df[list_of_cols_to_change] = df[list_of_cols_to_change].apply(to_date)