2 votes

Question sur le rééchantillonnage de temps avec Pandas et le tracé

Je suis nouveau en Python et Pandas. J'essaie de générer un graphique en barres qui montre la différence entre le dernier échantillon de chaque jour. Si ma méthode est incorrecte, merci de me le faire savoir.

Exemple de jeu de données de départ

               DateTime         Data1       Data2
0   2019-11-10 21:05:12  1.000000e-08      0.000000
1   2019-11-10 21:05:26  1.000000e-08      0.000000
2   2019-11-10 21:13:28  1.000000e-08      0.000000
3   2019-11-10 21:20:17  1.000000e-08      0.000000
4   2019-11-10 21:29:50  1.000000e-08      0.000000
..                  ...           ...           ...
191 2019-11-13 10:05:31  4.918000e-05      0.000004
192 2019-11-13 10:15:32  4.918000e-05      0.000004
193 2019-11-13 10:25:33  4.918000e-05      0.000004
194 2019-11-13 10:35:34  4.918000e-05      0.000004
195 2019-11-13 10:45:35  4.918000e-05      0.000004

Cela me donne la dernière entrée de chaque jour mais elle a une colonne supplémentaire du même nom "DateTime" sur une nouvelle ligne. Lorsque je trace cela, l'axe x utilise le "DateTime" avec l'heure encore dedans. Je veux utiliser la colonne qui n'a que la date.

res = pd.DataFrame()
res = df.resample('D', on='DateTime').last()
res.plot(kind='bar', x='DateTime')
plt.tight_layout()
plt.show()
print(res)

Résultats de l'impression

                      DateTime         Data1         Data2
DateTime                                                  
2019-11-10 2019-11-10 22:00:14  1.000000e-08  0.000000e+00
2019-11-11 2019-11-11 22:31:05  8.460000e-06  1.100000e-07
2019-11-12 2019-11-12 23:13:15  3.718000e-05  3.240000e-06
2019-11-13 2019-11-13 10:25:33  4.918000e-05  4.010000e-06

Cela me donne la différence par rapport au jour précédent. Mais il a encore les deux colonnes du même nom. Lorsque j'essaie de le tracer, il utilise la colonne "DateTime" qui a "1 days 00:30:51", et j'ai besoin de l'autre colonne.

res2 = pd.DataFrame()
res2 = res.diff()
res2.drop(res2.index[0], inplace=True)
res2.plot(kind='bar', x='DateTime')
plt.tight_layout()
plt.show()
print(res2)

Résultats de l'impression

                  DateTime     Data1         Data2
DateTime                                          
2019-11-11 1 days 00:30:51  0.000008  1.100000e-07
2019-11-12 1 days 00:42:10  0.000029  3.130000e-06
2019-11-13 0 days 11:12:18  0.000012  7.700000e-07

Est-ce que quelqu'un peut expliquer ce qu'il se passe, et comment je peux obtenir le graphique en barres dont j'ai besoin?

0voto

Andre Points 21

Quang, merci pour votre aide. Voici le code que j'utilise.

res = pd.DataFrame()
res = df.set_index('DateTime').resample('D').last()
res.plot(kind='bar')
plt.tight_layout()
plt.show()
print(res)

res2 = pd.DataFrame()
res2 = res.diff()
res2.drop(res2.index[0], inplace=True)
ax = res2.plot(kind='bar', rot=20)
f = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S').strftime('%b %d')
ax.set_xticklabels([ f(x.get_text()) for x in ax.get_xticklabels()])
plt.tight_layout()
plt.show()
print(res2)

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