J'ai pris ma série et l'ai forcée à une colonne datetime de dtype = datetime64[ns]
(bien que seule la résolution du jour soit nécessaire ... je ne sais pas comment changer).
import pandas as pd
df = pd.read_csv('somefile.csv')
column = df['date']
column = pd.to_datetime(column, coerce=True)
mais le traçage ne fonctionne pas:
ipdb> column.plot(kind='hist')
*** TypeError: ufunc add cannot use operands with types dtype('<M8[ns]') and dtype('float64')
Je voudrais tracer un histogramme qui montre simplement le nombre de dates par semaine, mois ou année .
Il y a sûrement un moyen de faire cela pandas
?
python
pandas
matplotlib
time-series
sucette
la source
la source
Réponses:
Compte tenu de ce df:
et, si ce n'est pas déjà le cas:
Pour afficher le nombre de dates par mois:
.dt
vous permet d'accéder aux propriétés datetime.Ce qui vous donnera:
Vous pouvez remplacer mois par année, jour, etc.
Si vous voulez distinguer l'année et le mois par exemple, faites simplement:
Qui donne:
C'était ce que tu voulais? Est-ce clair?
J'espère que cela t'aides !
la source
date
ouDate
voici les noms de colonnes, donc si votre colonne avec des dates s'appelle foo, ce serait:df.foo.dt.month
groupby
combiner deux attributs de données de colonnes (par exemple: année et date)?Je pense que le rééchantillonnage est peut-être ce que vous recherchez. Dans votre cas, faites:
Il ne fait que compter et non l'intrigue, vous devez donc créer vos propres parcelles.
Voir cet article pour plus de détails sur la documentation de la documentation de resample pandas resample
J'ai rencontré des problèmes similaires à ceux que vous avez rencontrés. J'espère que cela t'aides.
la source
how
est obsolète. La nouvelle syntaxe estdf.resample('1M').count()
Exemple rendu
Exemple de code
la source
J'ai pu contourner ce problème en (1) traçant avec matplotlib au lieu d'utiliser directement le dataframe et (2) en utilisant l'
values
attribut. Voir exemple:Cela ne fonctionne pas si je ne l'utilise pas
values
, mais je ne sais pas pourquoi cela fonctionne.la source
Voici une solution lorsque vous souhaitez simplement avoir un histogramme comme vous l'attendez. Cela n'utilise pas groupby, mais convertit les valeurs de date / heure en nombres entiers et modifie les étiquettes sur le tracé. Certaines améliorations pourraient être apportées pour déplacer les étiquettes de graduation vers des emplacements pairs. De plus, avec l'approche, un graphique d'estimation de la densité du noyau (et tout autre graphique) est également possible.
la source
Je pense que pour résoudre ce problème, vous pouvez utiliser ce code, il convertit le type de date en types int:
pour obtenir la date uniquement, vous pouvez ajouter ce code:
la source
J'avais juste des problèmes avec ça aussi. J'imagine que puisque vous travaillez avec des dates, vous souhaitez conserver l'ordre chronologique (comme je l'ai fait.)
La solution de contournement est alors
S'il vous plaît, si quelqu'un connaît un meilleur moyen, veuillez parler.
EDIT: pour jean ci-dessus, voici un échantillon des données [j'ai échantillonné au hasard à partir de l'ensemble de données complet, d'où les données d'histogramme triviales.]
Production:
la source
Toutes ces réponses semblent trop complexes, du moins avec les pandas `` modernes '', ce sont deux lignes.
la source
DataFrame
, mais pas si tout ce que vous avez est un fichierSeries
. Envisageriez-vous d'ajouter une note sur cette affaire?