151 votes

Comment convertir des chaînes de caractères dans un cadre de données Pandas en un type de données 'date' ?

J'ai un cadre de données Pandas dont l'une des colonnes contient des chaînes de dates au format suivant YYYY-MM-DD

Par exemple '2013-10-28'

Au moment où le dtype de la colonne est object .

Comment convertir les valeurs des colonnes au format de date Pandas ?

156voto

Andy Hayden Points 38010

Essentiellement équivalent à @waitingkuo, mais j'utiliserais pd.to_datetime ici (il semble un peu plus propre, et offre quelques fonctionnalités supplémentaires, par ex. dayfirst ) :

In [11]: df
Out[11]:
   a        time
0  1  2013-01-01
1  2  2013-01-02
2  3  2013-01-03

In [12]: pd.to_datetime(df['time'])
Out[12]:
0   2013-01-01 00:00:00
1   2013-01-02 00:00:00
2   2013-01-03 00:00:00
Name: time, dtype: datetime64[ns]

In [13]: df['time'] = pd.to_datetime(df['time'])

In [14]: df
Out[14]:
   a                time
0  1 2013-01-01 00:00:00
1  2 2013-01-02 00:00:00
2  3 2013-01-03 00:00:00

Manipulation ValueError s
Si vous vous trouvez dans une situation où faire

df['time'] = pd.to_datetime(df['time'])

Lance un

ValueError: Unknown string format

Cela signifie que vous avez des valeurs non valides (non coercibles). Si vous êtes d'accord pour qu'elles soient converties en pd.NaT vous pouvez ajouter un errors='coerce' argument pour to_datetime :

df['time'] = pd.to_datetime(df['time'], errors='coerce')

138voto

waitingkuo Points 7290

Utilisez astype

In [31]: df
Out[31]: 
   a        time
0  1  2013-01-01
1  2  2013-01-02
2  3  2013-01-03

In [32]: df['time'] = df['time'].astype('datetime64[ns]')

In [33]: df
Out[33]: 
   a                time
0  1 2013-01-01 00:00:00
1  2 2013-01-02 00:00:00
2  3 2013-01-03 00:00:00

47voto

fantabolous Points 431

J'imagine que de nombreuses données arrivent dans Pandas à partir de fichiers CSV. Dans ce cas, il suffit de convertir la date lors de la lecture initiale du CSV :

dfcsv = pd.read_csv('xyz.csv', parse_dates=[0]) où le 0 fait référence à la colonne dans laquelle se trouve la date.
Vous pouvez également ajouter , index_col=0 là-dedans si vous voulez que la date soit votre index.

Ver https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

30voto

szeitlin Points 1455

Maintenant, vous pouvez faire df['column'].dt.date

Notez que pour les objets datetime, si vous ne voyez pas l'heure alors qu'ils sont tous à 00:00:00, ce n'est pas le fait de pandas. C'est le notebook iPython qui essaie de rendre les choses jolies.

12voto

Si vous voulez obtenir le format DATE et non DATETIME :

df["id_date"] = pd.to_datetime(df["id_date"]).dt.date

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