web-dev-qa-db-fra.com

Extraire les colonnes spécifiques du fichier csv à lister Python

Ce que j'essaie de faire est de tracer les valeurs de latitude et de longitude de tempêtes spécifiques sur une carte en utilisant matplotlib, fond de carte, python, etc. Mon problème est que j'essaie d'extraire la latitude, la longitude et le nom des tempêtes sur carte, mais je continue à avoir des erreurs entre les lignes 41 à 44 où je tente d'extraire les colonnes dans la liste. Quelqu'un pourrait-il m'aider s'il vous plaît à comprendre cela. Merci d'avance.

Voici à quoi ressemble le fichier:

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

Je veux que la liste ressemble à ceci:

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

Voici ce que j'ai jusqu'à présent:

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)

Voici le dernier message d'erreur/traceback que j'ai reçu:

Traceback (appel le plus récent en dernier):
Fichier "/home/darealmzd/lstorms.py", ligne 42, dans

en-tête = reader.next ()
_ csv.Error: caractère de nouvelle ligne vu dans un champ non entre guillemets - devez-vous ouvrir le fichier en mode de nouvelle ligne universel?

28
mikez1

Cela ressemble à un problème de fins de ligne dans votre code. Si vous allez utiliser tous ces logiciels scientifiques, vous pouvez aussi utiliser Pandas pour la partie de lecture CSV, qui est à la fois plus robuste et plus utile que le csv module:

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

Si vous voulez que vos listes soient comme dans la question, vous pouvez maintenant faire:

names = data.name.tolist()
latitude = data.latitude.tolist()
longitude = data.longitude.tolist()
55
chthonicdaemon

Une version standard-lib (pas de pandas)

Cela suppose que la première ligne du csv est l’en-tête

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']
37
Ben Southgate