2016-04-16 5 views
0

Ich bin auf der Suche nach ein wenig Hilfe, ich bin wirklich neu in Python und weiß nicht, ob es einfach macht schwieriger für myslef oder was. Ich versuche, ein einfaches Liniendiagramm aus einer CSV-Datei zu zeichnen. versuchte Ive eine Reihe von Ansätzen, aber alle Rück den Fehler: Valueerror: konnte nicht Zeichenfolge konvertieren zu schweben:Plotgraph von CSV

Dies ist der Code, wenn das Beste mit

import csv` 
import pylab as pl 
import numpy as np 
matplotlib.dates as mdates 
with open('D:/growth_rate.csv') as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=',') 

for row in readCSV: 
    print (row) 
a= (row) 
np.shape(a) 
x,y = np.loadtxt('D:/growth_rate.csv', delimiter = ',', unpack=True, 
         converters = {0: mdates.strpdate2num('%d/%m/%Y')}) 

Ive versuchte auch die csv zu bekommen schien Ansatz Leser, aber ähnliches Problem

a = zip(*csv.reader(open('D:/growth_rate.csv', 'rb'))) 
csv.writer(open('D:/growth_rate.csv', "wb")).writerows(a) 

print a 

ich weiß nicht, ob es ein Problem mit der cSV-Datei, es ursprünglich eine xls-Datei war, mit einem Unternehmen, Kopf- und anderem Unsinn, so dass ich es in eine csv und auch versucht, ein txt Datei. Entweder das oder ich vermisse etwas wirklich offensichtlich,

Jede Hilfe, sehr geschätzt.

+0

können Sie einen Teil Ihres CSV Post Datei oder besser ein Link zu ihr oder Excel-Datei, so dass wir es herunterladen und versuchen konnten, eine funktionierende Lösung zu entwickeln? – MaxU

+0

hochgeladen es auf onedrive, lassen Sie mich wissen, wenn der Link funktioniert. Prost https://onedrive.live.com/redir "resid = 5D34F52D8051D718! 3165 & authkey =! AAYwslCeyK_R5Zs & ithint = Datei% 2ccsv –

+0

In den ersten zwei Zeilen gibt es keine Werte - ist es OK? Und wie wollen Sie es als Linie oder als Balken darstellen? Ist es in Ordnung,' 'zu verwenden Pandas-Modul? - es wird viel einfacher sein – MaxU

Antwort

2

Sie können dies auch in numpy/matplotlib ohne Pandas zu benötigen. Beachten Sie, dass np.genfromtxt mit Leerzeilen fein bewältigen können (im Gegensatz zu np.loadtxt gegenüber, die brechen. Standardmäßig diese Werte mit NaN s gefüllt, aber Sie können dies ändern, mit der filling_values Option.

import numpy as np 
import matplotlib.dates as mdates 
from matplotlib import pyplot as plt 

date_decode_function = lambda b: mdates.strpdate2num('%d/%m/%Y')(b.decode()) 

dates, growth_rates = np.genfromtxt('growth_rate.csv', 
            delimiter = ',', 
            unpack=True, 
            converters = {0: date_decode_function}) 


fig, ax = plt.subplots() 
ax.plot_date(dates, growth_rates,'-',lw=2) 
plt.xlabel("Date", fontsize=16) 
plt.ylabel("Growth rate", fontsize=16) 

plt.grid() 
plt.show() 
+0

Das funktioniert. Brillant. Gibt es eine Möglichkeit, mehrere Grafiken auf dem einen Ausgang zu haben? Separate Grafiken, aber als ob es für den einen Ausdruck war. Die CSV-Datei, die ich hochgeladen habe, ist ein kleinerer Abschnitt einer größeren Datei. –

+0

@anthonymyccool Sie müssen die pltplot-Methode verwenden. Der genaue Aufruf hängt davon ab, was Sie erreichen möchten, aber die Beispiele [hier] (http://matplotlib.org/examples/pylab_examples/subplot_demo.html) sollten helfen. – or1426

+0

yeh etwas ähnlich zu dieser Ausgabe, ich habe ein bisschen basteln und sehen, was ich habe. Danke an alle, half mir wirklich da draußen –

0

Pandas Ansatz:

import pandas as pd 
import matplotlib as plt 

fn = r'D:\temp\.data\growth_rate.csv' 
#df = pd.read_csv(fn, parse_dates=[0], names=['date','val']).set_index('date') 
df = pd.read_csv(fn, names=['date','val']).set_index('date') 

# bar plot 
df.plot(kind='bar') 

# line plot 
#df.plot() 

plt.show() 

enter image description here

enter image description here

+0

Stellt sich heraus, ich kann Pandas nicht verwenden, danke trotzdem –