0

そのため、Python で CSV モジュールを使用して、2 つの 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()

今、2 つの 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

この場合、それが何を意味するのかわかりません。前述したように、私はこれに慣れていないので、本当に単純なことかもしれません。何か案は?

4

1 に答える 1

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
を使用するためのドキュメントと例は、いつでもオンラインで見つけることができます。素晴らしい図書館です。 別の提案が必要かどうかはわかりませんが、コード内の組み込み関数の代わりに使用することをお勧めします。
defaultdictdict()

于 2017-09-11T12:01:30.067 に答える