J'ai une trame de données de 13 colonnes et 55 000 lignes J'essaie de convertir 5 de ces lignes en datetime, en ce moment elles renvoient le type "objet" et j'ai besoin de transformer ces données pour l'apprentissage automatique Je sais que si je le fais
data['birth_date'] = pd.to_datetime(data[birth_date], errors ='coerce')
il retournera une colonne datetime mais je veux le faire pour 4 autres colonnes également, y a-t-il une ligne que je peux écrire pour les appeler toutes? Je ne pense pas pouvoir indexer comme
data[:,7:12]
merci!
Vous pouvez utiliser apply
pour parcourir chaque colonne à l'aide de pd.to_datetime
data.iloc[:, 7:12] = data.iloc[:, 7:12].apply(pd.to_datetime, errors='coerce')
my_df[['column1','column2']] =
my_df[['column1','column2']].apply(pd.to_datetime, format='%Y-%m-%d %H:%M:%S.%f')
Remarque: bien sûr, le format peut être modifié selon les besoins.
Si les performances sont un problème, je vous conseille d'utiliser la fonction suivante pour convertir ces colonnes en date_heure:
def lookup(s):
"""
This is an extremely fast approach to datetime parsing.
For large data, the same dates are often repeated. Rather than
re-parse these, we store all unique dates, parse them, and
use a lookup to convert all dates.
"""
dates = {date:pd.to_datetime(date) for date in s.unique()}
return s.apply(lambda v: dates[v])
to_datetime: 5799 ms
dateutil: 5162 ms
strptime: 1651 ms
manual: 242 ms
lookup: 32 ms
Source: https://github.com/sanand0/benchmarks/tree/master/date-parse
Si vous voulez plutôt convertir au moment du chargement, vous pouvez faire quelque chose comme ça
date_columns = ['c1','c2', 'c3', 'c4', 'c5']
data = pd.read_csv('file_to_read.csv', parse_dates=date_columns)
Vous devez d'abord extraire toutes les colonnes qui vous intéressent de data
puis vous pouvez utiliser pandas applymap
pour appliquer to_datetime
à chaque élément du cadre extrait, je suppose que vous connaissez l'index des colonnes que vous souhaitez extraire, dans le code ci-dessous les noms des colonnes de la troisième à la seizième colonnes sont extraits. vous pouvez également définir une liste et y ajouter les noms des colonnes et l'utiliser en place, vous devrez peut-être également passer le format date/heure des entrées DateTime
import pandas as pd
cols_2_extract = data.columns[2:15]
data[cols_2_extract] = data[cols_2_extract].applymap(lambda x : pd.to_datetime(x, format = '%d %M %Y'))