35

以下のような単純な CSV ファイルを読み取り、その内容を 2D 配列に入れようとしています。

"","x","y","sim1","sim2","sim3","sim4","sim5","sim6","sim7","sim8","sim9","sim10","sim11","sim12"
"1",181180,333740,5.56588745117188,6.29487752914429,7.4835410118103,5.75873327255249,6.62183284759521,5.81478500366211,4.85671949386597,5.90418815612793,6.32611751556396,6.99649047851562,6.52076387405396,5.68944215774536
"2",181140,333700,6.36264753341675,6.5217604637146,6.16843748092651,5.55328798294067,7.00429201126099,6.43625402450562,6.17744159698486,6.72836923599243,6.38574266433716,6.81451606750488,6.68060827255249,6.14339065551758
"3",181180,333700,6.16541910171509,6.44704437255859,7.51744651794434,5.46270132064819,6.8890323638916,6.46842670440674,6.07698059082031,6.2140531539917,6.43774271011353,6.21923875808716,6.43355655670166,5.90692138671875

これを行うには、これを使用します:

data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1)

しかし、私はいつもこのメッセージを受け取りました:

"ValueError: could not convert string to float: "1"

問題は各行の最初の列にあると思いました。というわけで、最初のコラムを抜きにして読んでみましたが、読み方がわかりませんでした。

では、どうすれば最初の列を無視できますか? このファイルを最初の列で読み取る方法はありますか?

4

7 に答える 7

43

任意の列のコンバーターを指定できます。

converters = {0: lambda s: float(s.strip('"')}
data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, converters=converters)

または、使用する列を次のように指定できます。

data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, usecols=range(1,15))

http://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html


列数を知らなくても最初の列をスキップできる 1 つの方法は、csv から手動で列数を読み取ることです。フォーマットの不一致を考慮して、場合によってはこれを微調整する必要があるかもしれませんが、これは簡単です*。

with open("Data/sim.csv") as f:
    ncols = len(f.readline().split(','))

data = np.loadtxt("Data/sim.csv", delimiter=',', skiprows=1, usecols=range(1,ncols+1))

先頭に空白行がある場合は飛ばしてください。フィールド ヘッダーにコンマが含まれている可能性がある場合は、代わりに最初のデータ行を使用して列をカウントする必要があります。したがって、特定の問題がある場合は、詳細を追加してコードをより堅牢にすることができます。

于 2013-10-02T18:12:39.467 に答える
1
import pandas

pandas_data = pandas.read_csv('filename', sep=",", header=0,index_col=0) 
于 2021-09-25T12:18:36.730 に答える
0

csvライブラリを使ってcsvファイルを読み込もうとしている

import csv

def someFunc(fname):
    with open(fname) as f:
    reader = csv.reader(f)

    i = 0
    header = True
    for row in reader:
        if header:
            header = False
            continue

        out[i] = [row[j] for j in range(len(columns))]
        i += 1
return out

out には 2D 配列が含まれます。

于 2013-10-02T18:18:32.687 に答える