web-dev-qa-db-fra.com

changer plusieurs colonnes dans pandas dataframe en datetime

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!

20
kwashington122

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')
29
Ted Petrou
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.

12
mel el

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

11
SerialDev

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)
2
smishra

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'))
1
sgDysregulation