2015-10-21 32 views
0

試圖編寫一個讀取csv文件並打印x-y圖的python腳本。我有一個csv文件,有幾行和多列數據。我想繪製第一列和第二列的x-y圖。以下是我這麼遠......使用Python進行基本CSV x-y繪圖

import csv 
def getColumn(filename, column): 
    results = csv.reader(open(filename), delimiter="\t") 
    return [result[column] for result in results] 

x = getColumn("TableOne.csv",0) 
y = getColumn("TableOne.csv",1) 

plt.figure("X-Y Plot") 
plt.xlabel("Site") 
plt.ylabel("Average") 
plt.plot(x,y) 

...但它的閱讀按行,不列我的csv文件,它輸出一串數據好壞參半,而不是我想要的一個具體數據。有什麼建議麼?

+0

你能提供TableOne.csv的幾行?做頭-5 TableOne.csv – blackmamba

回答

0

看看zip函數和關於zip splats的一些答案。

您可以輕鬆地做到這一點:

In [1]: data = [['x1', 'y1'], ['x2', 'y2'], ['x3', 'y3']] 

In [2]: zip(*data) 
Out[2]: [('x1', 'x2', 'x3'), ('y1', 'y2', 'y3')] 

這裏,*data解壓data到3列出的[x, y]對。然後zip通過將每個列表的第一個元素放入一個組中,將每個列表的第二個元素放入另一個組中,將這些組合在一起,依此類推。由於每個列表只有2個元素,因此zip(*data)會分別返回兩個組,即x和y元素。

在你的情況,改變

def getColumns(filename): 
    results = csv.reader(open(filename), delimiter="\t") 
    return zip(*list(results)) # may not need the list() but just in case 

x, y = getColumns("TableOne.csv") 

plt.figure("X-Y Plot") 
plt.xlabel("Site") 
plt.ylabel("Average") 
plt.plot(x,y)