40

私がやろうとしているのは、matplotlib、basemap、python などを使用して、特定の嵐の緯度と経度の値をマップにプロットすることです。私の問題は、嵐の緯度、経度、名前を抽出しようとしていることです。マップしますが、列をリストに抽出しようとする行 41 ~ 44 の間でエラーが発生し続けます。誰かがこれを理解するのを手伝ってくれませんか。前もって感謝します。

ファイルは次のようになります。

1957,AUDREY,HU, 21.6N, 93.3W
1957,AUDREY,HU,22.0N,  93.4W
1957,AUDREY,HU,22.6N,  93.5W
1957,AUDREY,HU,23.2N,  93.6W

リストを次のようにしたい:

latitude = [21.6N,22.0N,23.4N]
longitude = [93.3W, 93.5W,93.8W]
name = ["Audrey","Audrey"]

これが私がこれまでに持っているものです:

data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=1)
'''print data'''

data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=0)

f= open('louisianastormb.csv', 'rb')
reader = csv.reader(f, delimiter=',')
header = reader.next()
zipped = zip(*reader)

latitude = zipped[3]
longitude = zipped[4]
names = zipped[1]
x, y = m(longitude, latitude)

私が受け取った最後のエラーメッセージ/トレースバックは次のとおりです。

トレースバック (最新の呼び出しが最後):
ファイル "/home/darealmzd/lstorms.py"、42 行目

header = reader.next()
_csv.Error: 引用符で囲まれていないフィールドに改行文字が見られます - ファイルをユニバーサル改行モードで開く必要がありますか?

4

3 に答える 3

72

これは、コードの行末の問題のようです。これらの他のすべての科学パッケージを使用する場合は、モジュールだけよりも堅牢で便利な CSV 読み取り部分にPandasを使用することもできます。csv

import pandas
colnames = ['year', 'name', 'city', 'latitude', 'longitude']
data = pandas.read_csv('test.csv', names=colnames)

質問のようにリストが必要な場合は、次のことができます。

names = data.name.tolist()
latitude = data.latitude.tolist()
longitude = data.longitude.tolist()
于 2013-10-21T05:42:51.817 に答える
54

標準ライブラリ バージョン (パンダなし)

これは、csv の最初の行がヘッダーであると想定しています

import csv

# open the file in universal line ending mode 
with open('test.csv', 'rU') as infile:
  # read the file as a dictionary for each row ({header : value})
  reader = csv.DictReader(infile)
  data = {}
  for row in reader:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]

# extract the variables you want
names = data['name']
latitude = data['latitude']
longitude = data['longitude']
于 2015-03-16T17:11:09.483 に答える