CSV模块,Python:列表索引超出范围

时间:2013-03-25 11:16:51

标签: python csv import module

所以,我正在尝试使用Python中的CSV模块从两个excel文件的某些列中获取数据。我是编程的新手,所以可能会犯一个非常愚蠢的错误,请耐心等待......

它的外观如下:

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()

现在我想从两个excel文件的3列中获取数据,这就是我所做的:

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])

和读者2再次相同。 当我运行它时,我收到以下错误消息:

start = row[4]
list index out of range

我不知道在这种情况下这意味着什么,正如我所说的,我是新手,所以它可能非常简单。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

尝试使用 Pandas 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()函数。