web-dev-qa-db-fra.com

Traçage en utilisant Pandas et format datetime

J'ai une trame de données avec seulement deux colonnes, Date et ClosingPrice. J'essaie de les tracer en utilisant df.plot () mais continue à obtenir cette erreur:

ValueError: la limite de vue minimum -36785.37852 est inférieure à 1 et est une valeur de date Matplotlib non valide. Cela se produit souvent si vous transmettez une valeur non datetime à un axe qui a des unités datetime

J'ai trouvé de la documentation à ce sujet dans matplotlib mais cela indique comment s'assurer que le format est datetime. Voici le code que je dois m'assurer que le format est datetime et également imprimer le type de données pour chaque colonne avant d'essayer de tracer.

df.Date = pd.to_datetime(df.Date)

print(df['ClosingPrice'].dtypes)
print(df['Date'].dtypes)

Les résultats de ces instructions d'impression sont les suivants:

float64 datetime64 [ns]

Je ne sais pas quel est le problème car je vérifie le type de données avant de tracer. Voici également à quoi ressemblent les premières lignes de l'ensemble de données:

Date ClosingPrice 0 2013-09-10 64.7010 1 2013-09-11 61.1784 2 2013-09-12 61.8298 3 2013-09-13 60.8108 4 2013-09-16 58.8776 5 2013-09-17 59.5577 6 2013-09-18 60.7821 7 2013-09-19 61.7788 Toute aide est appréciée.

12
MathPhiz

LATEST EDIT après avoir vu plus de personnes se retrouver ici. Pour être clair pour les nouveaux utilisateurs de python, vous devez d'abord importer pandas pour que les codes ci-dessous fonctionnent:

import pandas as pd

Essayez d'abord de définir votre index comme colonne Datetime:

df.set_index('Date', inplace=True)

Juste pour être sûr, essayez de définir le type d'index (modifier: cela ne sera probablement pas nécessaire comme vous l'avez fait précédemment):

df.index = pd.to_datetime(df.index)

Et puis l'intrigue

df.plot()

Si cela résout le problème, c'est parce que lorsque vous utilisez la .plot() de l'objet DataFrame, l'axe X sera automatiquement l'index du DataFrame.

Si² votre DataFrame avait un Datetimeindex et 2 autres colonnes (disons ['Currency','pct_change_1']) Et que vous vouliez en tracer une seule (peut-être pct_change_1), Vous pourriez:

# single [ ] transforms the column into series, double [[ ]] into DataFrame
df[['pct_change_1']].plot(figsize=(15,8)) 

figsize=(15,8) vous définissez la taille du tracé (width, height).

Dernière modification:

Si vous ne souhaitez pas supprimer votre index d'origine, vous pouvez également:

df[['Date','ClosingPrice']].plot('Date', figsize=(15,8))
14
mrbTT