0

因此,我尝试使用 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])

对于 reader2 也是如此。当我运行它时,我收到以下错误消息:

start = row[4]
list index out of range

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

4

1 回答 1

0

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

于 2017-09-11T12:01:30.067 回答