4

Python(およびプログラミング全般)を初めて使用する場合、これが単純であるか、または私が見つけられなかった場所で回答された場合は、通常のフォーラム形式で私に嫌がらせをしてください。

たくさんのCSVがあり、それぞれに次のような10個のXY座標が含まれています。

10,5
2,4
5,6 
7,8
9,12
3,45
2,4
6,5
0,3 
5,6 

X座標とY座標を2つの別々のリストに分けて、特定のリストの各値から値を減算できるようにしようとしています。たとえば、X座標リストのすべての値から5を減算し、Y座標リストのすべての値から3を減算します。次に、各値のabs()を取得して、最小値を見つけます。これらの最小値が見つかったら、リストを一緒に追加して、各値が対応する値に追加されるようにします。

IE)Xの絶対値が次のようなものである場合

4
5
....

とYのようなもの

6
7
....

4と6、次に5と7などを追加したいと思います。

それらを分離するために、私は試しました

import csv
filein = open("/path/here")
reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
    listofxys.append(row)

Xs = listofxys.pop(0) # to pop all the X's

Ys = listofxys.pop() # to pop all the Y's

ただし、すべての主要な値の代わりに、最初のXYペアを提供します。私はここで何が間違っているのですか?

最終的な目標は、XY座標に最も近い点を見つけることです。したがって、これが悪い方法である場合は、遠慮なく別の方向に私を導いてください。

前もって感謝します!

4

3 に答える 3

5

Python でファイルを開くときは、このwithステートメントを使用するようにしてください 。これにより読みやすくなり、(例外が発生した場合でも) ファイルが閉じられないままになる可能性がなくなります。

あなたの実際の問題は、あなたがやりたいことをしていないことにあります。

reader = csv.reader(filein, skipinitialspace = True)
listofxys = []
for row in reader:
    listofxys.append(row)

これが行うことはすべてreader = list(csv.reader(filein, skipinitialspace = True))、非常に非効率的な方法です。

あなたがしたいことはzip()ビルトインを使用してペアのリストを取得し、それを 2 つのリストに変換することです。スター演算子を使用してこれを行います。

import csv

with open("test") as filein:
    reader = csv.reader(filein, skipinitialspace = True)
    xs, ys = zip(*reader)

print(xs)
print(ys)

これにより、次のことが得られます。

('10', '2', '5', '7', '9', '3', '2', '6', '0', '5')
('5', '4', '6', '8', '12', '45', '4', '5', '3', '6')

これらの値は文字列であることに注意してください。それらを数値として持ちたい場合は、次のように使用しますcsv.QUOTE_NONNUMERICreader = csv.reader(filein, quoting=csv.QUOTE_NONNUMERIC, skipinitialspace = True)

これにより、次のことが得られます。

(10.0, 2.0, 5.0, 7.0, 9.0, 3.0, 2.0, 6.0, 0.0, 5.0)
(5.0, 4.0, 6.0, 8.0, 12.0, 45.0, 4.0, 5.0, 3.0, 6.0)
于 2012-06-20T18:43:09.563 に答える
1

ここに文書化されている zip 関数を探しているようです。

http://docs.python.org/library/functions.html#zip

于 2012-06-20T18:43:37.277 に答える
1
    import os,csv, numpy, scipy
    from numpy import *
    f= open('some.csv', 'rb') 
    reader = csv.reader(f, delimiter=',')
    header = reader.next()
    zipped = zip(*reader)
    print( zipped[1] ) # is the 2nd column of the csv file

HTH

于 2013-05-31T17:49:34.137 に答える