-1

私はこのテキストファイルを持っています:www2.geog.ucl.ac.uk/~plewis/geogg122/python/delnorte.dat

3列目と4列目を抽出したい。

np.loadtxtを使用しています-エラーが発生します:

ValueError: invalid literal for float(): 2000-01-01

2005年にのみ興味があります。両方の列を抽出するにはどうすればよいですか?

4

3 に答える 3

1

特定の列のカスタム変換関数をに提供できますloadtxt
あなたは年だけに興味があるので、私は-関数を使用しlambdaて日付を分割し、最初の部分を:-に変換しますint

data = np.loadtxt('delnorte.dat',
         usecols=(2,3),
         converters={2: lambda s: int(s.split('-')[0])},
         skiprows=27)

array([[ 2000.,   190.],
       [ 2000.,   170.],
       [ 2000.,   160.],
       ..., 
       [ 2010.,   185.],
       [ 2010.,   175.],
       [ 2010.,   165.]])

その年をフィルタリングするには、numpyで論理インデックス2005を使用できます。

data_2005 = data[data[:,0] == 2005]

array([[ 2005.,   210.],
       [ 2005.,   190.],
       [ 2005.,   190.],
       [ 2005.,   200.],
        ....])
于 2012-12-31T15:28:22.787 に答える
0

csvモジュールの使用に同意します。私はこの答えを採用しました: あなたの質問に適用するためにPythonでscipy/numpyのcsvファイルを読んでください。numpy配列のデータが必要かどうか、またはリストで十分かどうかはわかりません。

import numpy as np
import urllib2
import csv

txtFile = csv.reader(open("delnorte.dat.txt", "r"), delimiter='\t')

fields = 5                   
records = [] 
for row, record in enumerate(txtFile):
    if (len(record) != fields or record[0]=='#'):
        pass
        # print "Skipping malformed record or comment: {}, contains {} fields ({} expected)".format(record,len(record),fields)
    else:
        if record[2][0:4] == '2005': 
            # assuming you want columns 3 & 4 with the first column indexed as 0
            records.append([int(record[:][3]), record[:][4]] ) 

# if desired slice the list of lists to put a single column into a numpy array
npData = np.asarray([ npD[0] for npD in records] ) 
于 2012-12-31T14:54:35.207 に答える
0

これらの値を読み取るためにNumPy.loadtxtを使用するのではなく、csvモジュールを使用してファイルをロードし、そのデータを読み取る必要があります。

于 2012-12-31T13:02:51.613 に答える