[英]CSV module, Python: list index out of range
因此,我嘗試在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
我不知道在這種情況下意味着什么,正如我說的,我對此並不陌生,所以這可能真的很簡單。 有任何想法嗎?
嘗試使用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)
您如何選擇修改它完全是您的選擇。
另外,如果要指定一系列串聯的列,則還可以在usecols
使用range
函數,如下所示:
usecols=range(4,7)
,其中各列從第4列開始到第6列結束(不考慮第7列)。
您始終可以在線找到有關使用Pandas的文檔和示例。 這是一個很棒的圖書館。
我不確定您是否要提出其他建議,但是我會說使用defaultdict
代替代碼中的內置dict()
函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.