Erreur de type Pandas en essayant de tracer
Je suis en train de créer une base de nuage de points basé sur une Pandas dataframe. Mais quand je l'appelle l'éparpillement de la routine, j'obtiens une erreur "TypeError: invalid type de promotion". Exemple de code pour reproduire le problème est indiqué ci-dessous:
t1 = pd.to_datetime('2015-11-01 00:00:00')
t2 = pd.to_datetime('2015-11-02 00:00:00')
Time = pd.Series([t1, t2])
r = pd.Series([-1, 1])
df = pd.DataFrame({'Time': Time, 'Value': r})
print(df)
print(type(df.Time))
print(type(df.Time[0]))
fig = plt.figure(figsize=(x_size,y_size))
ax = fig.add_subplot(111)
ax.scatter(df.Time, y=df.Value, marker='o')
Le résultat est
Time Value
0 2015-11-01 -1
1 2015-11-02 1
<class 'pandas.core.series.Series'>
<class 'pandas.tslib.Timestamp'>
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-285-f4ed0443bf4d> in <module>()
15 fig = plt.figure(figsize=(x_size,y_size))
16 ax = fig.add_subplot(111)
---> 17 ax.scatter(df.Time, y=df.Value, marker='o')
C:\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, **kwargs)
3635 edgecolors = 'face'
3636
-> 3637 offsets = np.dstack((x, y))
3638
3639 collection = mcoll.PathCollection(
C:\Anaconda3\lib\site-packages\numpy\lib\shape_base.py in dstack(tup)
365
366 """
--> 367 return _nx.concatenate([atleast_3d(_m) for _m in tup], 2)
368
369 def _replace_zero_by_x_arrays(sub_arys):
TypeError: invalid type promotion
Recherche j'ai trouvé un poste similaire Les Pandas de la Série TypeError et ValueError lors de l'utilisation de datetime qui suggère que l'erreur est provoquée par le fait d'avoir plusieurs types de données dans la série. Mais cela ne semble pas être la question dans mon exemple, comme en témoigne le type d'informations je suis à l'impression.
Remarque que si j'arrête d'utiliser les pandas datetime objets et faire le "Temps" d'un flotteur au lieu de cela fonctionne très bien, par exemple,
t1 = 1.1 #
t2 = 1.2
Time = pd.Series([t1, t2])
r = pd.Series([-1, 1])
df = pd.DataFrame({'Time': Time, 'Value': r})
print(df)
print(type(df.Time))
print(type(df.Time[0]))
fig = plt.figure(figsize=(x_size,y_size))
ax = fig.add_subplot(111)
ax.scatter(df.Time, y=df.Value, marker='o')
avec sortie
Time Value
0 1.1 -1
1 1.2 1
<class 'pandas.core.series.Series'>
<class 'numpy.float64'>
et le graphique semble un peu fine. Je suis à une perte pour expliquer pourquoi l'utilisation d'un datetime est à l'origine de la non valide la promotion du type d'erreur? Je suis à l'aide de Python 3.4.3 et les pandas 0.16.2.
source d'informationauteur Tom Johnson
Vous devez vous connecter pour publier un commentaire.
Merci @martinvseticka. Je pense que votre évaluation est correcte basée sur la numpy code que tu m'a indiqué. J'ai été en mesure de simplifier vos réglages un peu plus (et ajouté un troisième point de l'échantillon) pour obtenir
La clé semble être un appel "plot_date' plutôt que de 'complot'. Cela semble informer mapplotlib de ne pas essayer de concaténer les tableaux.
Il y a une autre façon, que l'on doit abandonner les usages de la Série. Suffit d'utiliser la liste pour le moment.
Est-ce ce que vous recherchez?
Je suis nouveau sur Python, alors j'espère que je ne me trompe pas. En gros, j'ai essayé d'adapter votre exemple, selon https://stackoverflow.com/a/13674286/99256.
Le problème avec ton script, c'est que
numpy
essaie pour concaténerdf.Time
etdf.Value
de la série et il ne peut pas trouver un type approprié pour le nouveau groupe, car un tableau est de type numérique et le second est composé deTimestamp
instances.scatter
parcelles ont certaines propriétés qui ne peuvent être simulés dansplot
ouplot_date
(comme la possibilité de tracer marqueurs de taille variable).De conversion de la série temporelle de type:
pandas.tslib.Timestamp
à une liste de type:datetime.datetime
avant de tracer le scatter a fait le tour pour moi:Vous pouvez aussi faire quelque chose comme ceci:
J'ai changé le type de colonne datetime à la chaîne de la mouche:
et le nuage de points des œuvres.
Ce qui concerne