2012-01-05 224 views
2

我想從csv文件讀取一列數據併爲其創建直方圖。我可以將數據讀入數組,但無法制作直方圖。下面是我做的:從csv文件製作直方圖

thimar=csv.reader(open('thimar.csv', 'rb')) 
thimar_list=[] 
thimar_list.extend(thimar) 
z=[] 
for data in thimar_list: 
    z.append(data[7]) 
zz=np.array(z) 
n, bins, patches = plt.hist(zz, 50, normed=1) 

它給我的錯誤:

TypeError: cannot perform reduce with flexible type 

任何想法是怎麼回事?

+1

您可能需要將字符串轉換爲數字。我認爲csv.reader只是創建字符串列表,並且numpy創建了一串字符串 – yosukesabai 2012-01-05 15:32:13

+1

你需要使用'csv'嗎?我認爲'np.loadtxt'會在這裏做得更好(簡單的代碼,自動轉換等)。 – 2012-01-05 15:57:44

+0

我嘗試使用csv over loadtxt,因爲它更好地處理非數字字段,例如列標籤。但是如果csv只有數字,那麼loadtxt是一個不錯的選擇。 – 2012-01-05 16:17:36

回答

1

修改第六行投串數字

z.append(float(data[7])) 

有了這個,我得到了一些情節與我取得的數據。

+0

這工作得很好。謝謝!!! – Labibah 2012-01-06 03:01:52

0

這裏有兩個選項,這人會工作,如果你所有的列是由數字:

array = np.loadtxt('thimar.csv', 'float', delimiter=',') 
n, bins, patches = plt.hist(array[:, 7], 50, normed=1) 

這個人是更好,如果你在你的文件的非數字列(即姓名,性別, ...):

thimar = csv.reader(open('thimar.csv', 'rb')) 
thimar_list = list(thimar) 
zz = np.array([float(row[7]) for row in thimar_list]) 
n, bins, patches = plt.hist(zz, 50, normed=1) 
+0

謝謝。我只是試過這個,它運作良好:) – Labibah 2012-01-06 03:02:56