web-dev-qa-db-de.com

Matplotlib/Pandas-Fehler beim Histogramm

Ich habe ein Problem mit dem Erstellen von Histogrammen aus Pandaserienobjekten und ich kann nicht verstehen, warum es nicht funktioniert. Der Code hat vorher gut funktioniert, jetzt aber nicht.

Hier ist ein bisschen von meinem Code (speziell ein Pandaserie-Objekt, von dem ich versuche, ein Histogramm zu erstellen):

type(dfj2_MARKET1['VSPD2_perc'])

welches das Ergebnis ausgibt: pandas.core.series.Series

Hier ist mein Plotcode:

fig, axes = plt.subplots(1, 7, figsize=(30,4))
axes[0].hist(dfj2_MARKET1['VSPD1_perc'],alpha=0.9, color='blue')
axes[0].grid(True)
axes[0].set_title(MARKET1 + '  5-40 km / h')

Fehlermeldung:

    AttributeError                            Traceback (most recent call last)
    <ipython-input-75-3810c361db30> in <module>()
      1 fig, axes = plt.subplots(1, 7, figsize=(30,4))
      2 
    ----> 3 axes[1].hist(dfj2_MARKET1['VSPD2_perc'],alpha=0.9, color='blue')
      4 axes[1].grid(True)
      5 axes[1].set_xlabel('Time spent [%]')

    C:\Python27\lib\site-packages\matplotlib\axes.pyc in hist(self, x, bins, range, normed,          weights, cumulative, bottom, histtype, align, orientation, rwidth, log, color, label,    stacked, **kwargs)
   8322             # this will automatically overwrite bins,
   8323             # so that each histogram uses the same bins
-> 8324             m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs)
   8325             m = m.astype(float) # causes problems later if it's an int
   8326             if mlast is None:

    C:\Python27\lib\site-packages\numpy\lib\function_base.pyc in histogram(a, bins, range,     normed, weights, density)
    158         if (mn > mx):
    159             raise AttributeError(
--> 160                 'max must be larger than min in range parameter.')
    161 
    162     if not iterable(bins):

AttributeError: max must be larger than min in range parameter.
61
jonas

Dieser Fehler tritt unter anderem auf, wenn Sie NaN-Werte in der Serie haben. Könnte das der Fall sein?

Diese NaNs werden von der hist-Funktion von matplotlib nicht gut gehandhabt. Zum Beispiel:

s = pd.Series([1,2,3,2,2,3,5,2,3,2,np.nan])
fig, ax = plt.subplots()
ax.hist(s, alpha=0.9, color='blue')

erzeugt den gleichen Fehler AttributeError: max must be larger than min in range parameter. Eine Möglichkeit besteht darin, die NaNs vor dem Plotten zu entfernen. Das wird funktionieren:

ax.hist(s.dropna(), alpha=0.9, color='blue')

Eine andere Option ist, die Pandas hist-Methode in Ihrer Serie zu verwenden und den axes[0] für das Schlüsselwort ax bereitzustellen:

dfj2_MARKET1['VSPD1_perc'].hist(ax=axes[0], alpha=0.9, color='blue')
110
joris

Der Fehler ist zu Recht auf die oben erläuterten NaN-Werte zurückzuführen. Verwenden Sie einfach df = df ['spaltenname']. Apply (pd.to_numeric), wenn der Wert nicht numerisch ist, und wenden Sie -df = df ['spaltenname'] an. Replace ( np.nan, Ihr_Wert).

0
brainhack