簡體   English   中英

CSV模塊,Python:列表索引超出范圍

[英]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

我不知道在這種情況下意味着什么,正如我說的,我對此並不陌生,所以這可能真的很簡單。 有任何想法嗎?

嘗試使用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)  

您如何選擇修改它完全是您的選擇。
另外,如果要指定一系列串聯的列,則還可以在usecols使用range函數,如下所示:
usecols=range(4,7) ,其中各列從第4列開始到第6列結束(不考慮第7列)。
您始終可以在線找到有關使用Pandas的文檔和示例。 這是一個很棒的圖書館。
我不確定您是否要提出其他建議,但是我會說使用defaultdict代替代碼中的內置dict()函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM