2013-03-25 34 views
0

所以,我試圖在Python中使用CSV模塊從兩個Excel文件中只有一些列中獲取數據。我是新來編程,所以可能都取得了非常愚蠢的錯誤,請多多包涵......CSV模塊,Python:列表索引超出範圍

這是它的外觀:

import sys 
import csv 

##functions 

resultsdir = "/blah" 

filename1=sys.argv[1] 
filename2=sys.argv[2] 
out = open(sys.argv[3],"w") 

#filename1,filename2 = "blub", "blub2" 

reader1 = csv.reader(open(resultsdir+"/"+filename1+".csv"), delimiter= '\t') 
reader2 = csv.reader(open(resultsdir+"/"+filename2+".csv"), delimiter= '\t') 

fields1 = reader1.next() 
fields2 = reader2.next() 

CNVs1 = dict() 
CNVs2 = dict() 

現在我想從3列中獲取數據從這兩個Excel文件,這是我做的:

for row in reader1: 
    start = row[4] #start being the title of the 5th column, this is probably where I went wrong... 
    end = row[5] 
    BF = float(row[9]) 
    CNVs1[chr].append([int(start),int(end),BF]) 

,並再次reader2相同。 當我運行它,我收到以下錯誤信息:

start = row[4] 
list index out of range 

我不知道是什麼,在這種情況下意味着,正如我說的,我是新來的這所以它可能是很簡單的東西。有任何想法嗎?

+3

您的文件至少有*一行,其中少於5列。 – 2013-03-25 11:18:20

+0

你能否提出一種方法,我可以從excel文件中的第5,6和9列中獲取數據? – 2013-03-25 11:23:09

+3

你正在做的正確,但你需要*確保*你有很多列的行。首先測試'len(row)',或許? – 2013-03-25 11:23:55

回答

0

嘗試使用熊貓read_csv函數並明確指定您要使用的列。例如,

import pandas as pd 

# some code 

reader1 = pd.read_csv('excelfile.csv', usecols=[4,5,6]) 
reader1 = reader1.values.tolist() 

# Now you can access the elements in the list reader1 

for row in reader1: 
    print(row) 

如何選擇修改此選項完全是您的選擇。
此外,如果要指定一個範圍這是在一系列的列,那麼你也可以使用range功能usecols這樣的:
usecols=range(4,7)其中列開始於4列,並最終在第6列(不考慮列7)。
您可以隨時在線找到使用Pandas的文檔和示例。這是一個偉大的圖書館。
我不確定你是否想要另一個建議,但我會說在你的代碼中使用defaultdict而不是內置的dict()函數。