102 votes

Comment convertir des colonnes en une seule colonne de date et heure dans pandas?

J'ai un dataframe où les 3 premières colonnes sont 'MOIS', 'JOUR', 'ANNÉE'

Dans chaque colonne il y a un entier. Y a-t-il un moyen pythonique de convertir les trois colonnes en datetimes alors qu'elles sont dans le dataframe?

De:

M    D    Y    Pommes   Oranges
5    6  1990      12        3
5    7  1990      14        4
5    8  1990      15       34
5    9  1990      23       21

en:

Datetimes    Pommes   Oranges
1990-6-5        12        3
1990-7-5        14        4
1990-8-5        15       34
1990-9-5        23       21

2voto

dolly singh Points 31

Une meilleure façon de procéder est la suivante :

import pandas as pd

import datetime

dataset = pd.read_csv('dataset.csv')

date=dataset.apply(lambda x: datetime.date(int(x['Yr']), x['Mo'], x['Dy']),axis=1)

date = pd.to_datetime(date)

dataset = dataset.drop(columns=['Yr', 'Mo', 'Dy'])

dataset.insert(0, 'Date', date)

dataset.head()

1voto

A.Kot Points 3343
 [pd.to_datetime(str(a)+str(b)+str(c),
                 format='%m%d%Y'
                ) pour a,b,c in zip(df.M, df.D, df.Y)]

0voto

Dan Points 619

Supposons que vous ayez un dictionnaire foo avec chaque colonne de dates en parallèle. Si tel est le cas, voici votre one liner :

>>> from datetime import datetime
>>> foo = {"M": [1,2,3], "D":[30,30,21], "Y":[1980,1981,1982]}
>>>
>>> df = pd.DataFrame({"Datetime": [datetime(y,m,d) for y,m,d in zip(foo["Y"],foo["M"],foo["D"])]})

Le cœur de cela se présente ainsi :

>>> [datetime(y,m,d) for y,m,d in zip(foo["Y"],foo["M"],foo["D"])]
[datetime.datetime(1980, 1, 30, 0, 0), datetime.datetime(1981, 2, 28, 0, 0), datetime.datetime(1982, 3, 21, 0, 0)]

C'est le type de chose pour laquelle zip a été conçu. Il prend des listes parallèles et les transforme en tuples. Ensuite, ils sont déballés en tuples (la partie for y,m,d in) par la compréhension de liste, puis alimentés dans le constructeur d'objet datetime.

pandas semble être satisfait des objets datetime.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X