2016-04-16 6 views
0

Im ищет немного помощи, Im действительно новичок в Python и не знаю, просто ли это делает thngs труднее для myslef или что. Im пытается построить простой графический граф из файла csv. Ive пытался несколько подходов, но все возвращает ошибку: ValueError: не может преобразовать строку плавать:Графический график от CSV

Это код, если кажущаяся, чтобы получить лучшее с

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 также попытался CSV считыватель подход, но подобная проблема

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

print a 

Я не знаю, если его проблема с файлом CSV, он изначально был XLS файл с заголовками компании и прочую ерунду, так что я положил его в CSV-файл, а также пытался txt файл. Либо это, либо им что-то действительно очевидно,

Любая помощь, очень ценится.

+0

Вы можете оставить часть вашего CSV файл или лучше ссылку на него или файл Excel, чтобы мы могли загрузить его и попытаться разработать рабочее решение? – MaxU

+0

загрузил его в onedrive, сообщите мне, работает ли ссылка. Приветствия https://onedrive.live.com/redir ? остаток = 5D34F52D8051D718! 3165 & authkey =! AAYwslCeyK_R5Zs & ithint = file% 2ccsv –

+0

В первых двух строках нет значений - это нормально? и как вы хотите построить его в виде строки или в виде столбцов? Можно ли использовать ' pandas'? - будет намного проще – MaxU

ответ

2

Вы также можете сделать это в Numpy/Matplotlib без необходимости панд. Обратите внимание, что np.genfromtxt может справиться с пустыми строками тонких (в отличие от np.loadtxt, который сломается. По умолчанию эти значения заполняются NaN с, но вы можете изменить это с помощью опции filling_values.

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

Thats working. Brilliant. Есть ли способ, которым я могу иметь несколько графиков на одном выходе? Отдельные графики, но, как если бы он был для печати. Загруженный файл csv - это меньшая часть большего файла –

+0

@anthonymccool. Вам нужно использовать метод plt.subplot. Точный вызов будет зависеть от того, что вы пытаетесь выполнить, но примеры [здесь] (http://matplotlib.org/examples/pylab_examples/subplot_demo.html) должны помочь. – or1426

+0

yeh что-то похожее на этот выход, плохо иметь крошечную возиться и посмотреть, что я придумал. Спасибо всем, действительно помог мне там –

0

панды подход:

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

Оказывается, я не могу использовать pandas, спасибо в любом случае –

Смежные вопросы