J'ai un fichier csv formaté comme suit:
Image Id,URL,Latitude,Longitude
17609472165,https://farm8.staticflickr.com/7780/17609472165_c44d9b5a0e_q.jpg,48.843226,2.31805
11375512374,https://farm6.staticflickr.com/5494/11375512374_66a4d9af6c_q.jpg,48.844166,2.376
24768920940,https://farm2.staticflickr.com/1571/24768920940_634cc06f43_q.jpg,48.844619,2.395897
9411072065,https://farm8.staticflickr.com/7368/9411072065_5e2083a32e_q.jpg,48.844666,2.3725
9996916356,https://farm3.staticflickr.com/2807/9996916356_640c493020_q.jpg,48.844666,2.3725
24281266199,https://farm2.staticflickr.com/1623/24281266199_bf63e25c23_q.jpg,48.844925,2.389616
Je veux importer ce fichier et pour chaque ligne du fichier, ajouter un point lat et lon à un tableau 2D. J'ai essayé du code tel que le suivant et cela ne fonctionne pas (ou n'imprime rien) et donne l'erreur "ValueError: toutes les dimensions du tableau d'entrée sauf l'axe de concaténation doivent correspondre exactement"
import numpy
data = open('dataset_import_noaddress', 'r')
A = []
for line in data:
fields = line.strip().split(',')
lat = fields[2]
lon = fields[3]
print lat
print lon
newrow = [lat, lon]
A = numpy.vstack([A, newrow])
Quelqu'un peut-il suggérer pourquoi cela ne fonctionne pas ou encore mieux suggérer une meilleure façon de réaliser la même chose. Merci!
3 réponses
Vous voulez simplement lire votre csv dans une matrice avec chaque latitude, longitude de ligne. Donc, fondamentalement, lisez, supprimez les 2 premières colonnes
Code
import numpy as np
input = np.genfromtxt(open("dataset.csv","rb"),delimiter=",", skip_header=1)
A = np.delete(input, [0,1], 1)
print(A)
Il lit simplement le csv toutes les valeurs non flottantes sont converties en nan. Ensuite, supprimez simplement les 2 premières colonnes avec np.delete
Sortie
[[ 48.843226 2.31805 ]
[ 48.844166 2.376 ]
[ 48.844619 2.395897]
[ 48.844666 2.3725 ]
[ 48.844666 2.3725 ]
[ 48.844925 2.389616]]
Donc, fondamentalement, vous voulez les données lat et longues du fichier csv, n'est-ce pas? Je suggère que vous utilisiez pandas'
read_csv()
, de cette façon, il n'est pas nécessaire de boucler le fichier ligne par ligne. Les pandas peuvent gérer toutes les colonnes à la fois.
import pandas as pd
file_ = pd.read_csv("dataset_import_noaddress", sep = ',')
A = np.array(file_[["Latitude", "Longitude"]])
print A
array([[ 48.843226, 2.31805 ],
[ 48.844166, 2.376 ],
[ 48.844619, 2.395897],
[ 48.844666, 2.3725 ],
[ 48.844666, 2.3725 ],
[ 48.844925, 2.389616]])
Tout d'abord, vous souhaitez généralement utiliser un format with open(filename, 'r') as ...:
. Une des raisons à cela est que le fichier sera automatiquement fermé si vous rencontrez une erreur.
On utilise souvent csv.reader pour lire les fichiers csv en Python ( bien que vous puissiez également lire le tableau en utilisant pd.read_csv (...) si vous utilisez des Pandas). Vous devez ensuite parcourir le lecteur à l'aide de for line in reader:
.
Vous obtenez des variables uniques et créez des listes intermédiaires, en utilisant numpy.vstack pour chaque ligne. Il serait plus efficace de tout agréger sous forme de liste, puis d'appeler vstack sur la liste entière.
A.append(line[2:4])
prend les troisième et quatrième éléments de la liste sur la ligne donnée (par exemple [48.843226, 2.31805]) et les ajoute à la liste plus grande A. Vous devez d'abord vous assurer que la ligne a au moins quatre valeurs avant d'ajouter, en gardant trace des mauvaises lignes.
Une fois A construit, vous appelez alors vstack.
import csv
with open(filename, 'r') as f:
A = []
bad_lines = []
reader = csv.reader(f)
for line in reader:
if len(line) == 4:
A.append(line[2:4])
else:
bad_lines.append(line)
A = np.vstack(A)
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.