2016-02-29 54 views
0

我正在從.txt文件正確調用數據時遇到問題。IndexError:數組,日期時間字符串和numpy genfromtxt的索引太多

我的數據的樣品看起來像這樣:

file1.txt 

Time: ID: W: X: Y: Z: 
2016/02/25:19:08:41 006124189X 769 372 363 348 
2016/02/25:21:41:13 006124189X 769 362 308 390 
2016/02/25:22:38:20 006124189X 769 362 363 390 
2016/02/26:07:37:42 006124189X 769 372 272 366 
2016/02/26:08:54:34 006124189X 769 372 272 366 
2016/02/26:09:57:04 006124189X 769 372 363 371 

其中第一列是一個時間字符串,第二個是由數字和字母組成的編號,其他都只是範圍的整數0-10000 。

我最終會嘗試根據記錄的時間值繪製一些這些整數值,但目前我只是試圖讓數據被正確調用。我目前的代碼設置爲:

import numpy as np 
import matplotlib.pyplot as plt 
import pylab 
import datetime 

#File name for data input. 
datafile = 'file1.txt' 

#Names to be used for column headers. 
names = ['Time', 'ID', 'W, 'X', 'Y', 'Z'] 

#Read Data from file into array. Skipping the first line. 
#Datatypes used, object for Time, String for ID and Integer for the rest. 
data = np.genfromtxt(datafile, skip_header=1, dtype="Object,S11,i8,i8,i8,i8", names = ['Time', 'ID', 'W', 'X', 'Y', 'Z']) 

#Print the data called to check it works. 
print data 

#Designating each column to a name. 
Time = data[:,0] 
ID = data[:,1] 
W = data[:,2] 
X = data[:,3] 
Y = data[:,4] 
Z = data[:,5] 

#Print designated column. 
print Time 

我試圖儘可能地確定我在做什麼。

最後,我想用matplotlib添加一些像這樣到最後包括一個情節:

plt.plot(Time,W, label='W vs Time') 
plt.xlabel('Time',fontsize=12) 
plt.ylabel('W',fontsize=12) 
plt.show() 

然而,當腳本在其目前的形式運行它給人的錯誤:

line 15, in <module> 
Time = data[:,0] 
IndexError: too many indices for array 

這個錯誤對於各個列是相同的,即

line 16, in <module> 
W = data[:,2] 
IndexError: too many indices for array 

打印數據行b efore會正確輸出文件中的所有數據,每次顯示爲'2016/02/25:19:08:32'等字符串,包括引號。

我不確定如何正確處理這裏的數據表單。如果我只是設置dtype = i8,那麼我可以調用除Time和ID列之外的任何數據列,這將可以調用所有行的-1值。

我曾嘗試以下this scipy doc,還試圖this stack page of a similar thing,我不能去上班。

任何幫助表示讚賞。

+0

你可以通過名字,因爲你已經在陣列結構 – 2016-02-29 12:59:17

+0

中已經提供的信息如果你的意思是除去像'時間=數據線訪問它們[:0]',只是使用數據= NP使用的名稱。名稱「時間」沒有定義」 –

回答

1

data是一個結構化數組。檢查其shapedtype。它命名了字段而不是列。

ID = data['ISBN'] 

應該工作,而不是data[:,1]

或者

Time = data[names[0]] 
ID = data[names[1]] 
... 

有些事情不對的genfromtxt文檔。它需要強調的是,如果使用names的結果將是一個結構化陣列與化合物dtype,並且用戶需要相應地訪問數據。

+0

感謝那些做的:運行'打印Time'是'NameError當genfromtxt線那麼結果。我現在不得不學習陣列類型,我猜。注意:我編輯了原始文章中的變量,以便像實際程序一樣在x,y,z等中進行匹配。 –