2017-04-02 4 views
0

Ich habe ein Histogramm erstellt aus einem Pandas-Datenframe, dass ich eine vertikale gestrichelte Linie plotten möchte, die den Mittelwert des Datensatzes darstellt. Ich habe this thread prüft, was genau ist der Stil die ich suche, aber ich kann nicht herausfinden, wie es mit meinem Code arbeiten zu lassen (siehe unten):Plotting Mittelwert als gestrichelte Linie im Histogramm mit Matplotlib

import pandas as pd 
import matplotlib.pyplot as plt 

#import csv file into pandas dataframe 
df = pd.read_csv('/path/to/my/file') 

#calculating mean 
m = df.mean() 
#print(m) 

#plotting histogram 
df.plot(kind='hist') 
#plt.axvline(m, color = 'r', linestyle = 'dashed', linewidth = 2) 

ich diesen Fehler empfangen am Ende:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Nicht sicher, was das bedeutet, jede Hilfe wäre willkommen.

BEARBEITEN: Meine Datendatei ist ein csv mit einer Spalte, erste Zeile ist eine Kopfzeile (Zeichenfolge) und alle folgenden 107 Zeilen sind Werte von App. 1.0E + 11 bis 4.0E + 11


gefälschte Daten (Python 2,7)

import io 
import numpy as np 
a = np.linspace(1, 4, num = 20) 
s = 'E11\n'.join(map(str, a)) 
s += 'E11' 
#print(s) 
df = pd.read_csv(io.BytesIO(s)) 
+0

Können Sie eine Probe Ihrer Datendatei schreiben? – Shaunak

+0

Hat eine Beschreibung oben gepostet, hilft das? – NaN

+0

Welche Zeile wirft die Ausnahme?, Können Sie den kompletten Traceback posten? – wwii

Antwort

0

m ist ein Panda-Serie, es hat einen Index und einen Wert - Matplotlib muss nicht wissen, wie es zu handhaben.

>>> print m 
1.0E11 2.578947e+11 
dtype: float64 
>>> type(m) 
<class 'pandas.core.series.Series'> 
>>> 

Der Wert der Mittelwert m[0] oder m.values, so:

plt.axvline(m[0], color = 'r', linestyle = 'dashed', linewidth = 2) 
#or 
plt.axvline(m.values, color = 'r', linestyle = 'dashed', linewidth = 4) 
+0

Das hat bei mir Danke geklappt! – NaN

-1

Ich glaube, Sie m.all() anstelle von m verwendet werden soll. und sie verwenden plt.show() für plt, um Ihr Histogramm zu zeichnen. so wird der Code wie folgt aussehen:

#plotting histogram 
# df.plot(kind='hist') 
plt.axvline(m.all(), color = 'r', linestyle = 'dashed', linewidth = 2) 
plt.show() 
+0

Hat das für dich funktioniert? – wwii

+0

ja, ich habe die Handlung mit dieser Methode. – ida