2017-05-08 2 views
2

ich ein GPS-Parameter Datenrahmen mit verschiedenen Arten von Daten (Integer, Objekte, Schwimmern, und Streicher) wie folgt:Export Pandas Datenrahmen mit unterschiedlichen Datentypen in Python csv

ID    time    speed pdop longitude latitude 
0 356363050613605 2017-02-20T17:04:40 210 3.051 8.81640 44.75045 
1 356363050637620 2017-02-21T13:44:38 172 60.00 9.41286 45.48268 

dann unter Verwendung das Paket geopy i'have den Breiten- und Längengrade geparst Koordinaten in geographische Positionen mit dem folgenden Code

import geopy 
from geopy.geocoders import Nominatim 
geolocator = Nominatim() 

def f(row): 
    loc = str(row['latitude']) + ',' +str(row['longitude']) 
    locations = geolocator.reverse(loc) 
    return location 

df['address'] = df.apply(lambda row: f(row), axis=1) 

die eine Adresse Spalte an den Datenrahmen mit der vollen Adresse und die Koordinaten als Zeichenkette zurückgegeben .

ID    time    speed pdop longitude latitude address 
0 356363050613605 2017-02-20T17:04:40 210 3.051 8.81640 44.75045 (Viale del Lavoro, Zona Industriale C.I.P.I.A.N., Novi Ligure, AL, PIE, 15067, Italia), (44.7524715, 8.8122644) 
1 356363050637620 2017-02-21T13:44:38 172 60.00 9.41286 45.48268 (Strada Provinciale 14 Rivoltana, Liscate, MI, LOM, 20066, Italia), (45.4821247, 9.4118136) 

Das Problem ist jetzt, dass ich versuche, den Daten-Frame in eine CSV-Datei mit „df.to_csv (‚output.csv‘)“ aber es hält Rückkehr der folgenden Fehler zu exportieren:

TypeError: str returned non-string (type NoneType)

ich habe sogar versucht, den folgenden Code, das funktioniert nur, wenn die Angabe der Adresse Spalte zurückzukehren, wie folgt:

with open('outpu.csvt', 'w') as file: 
    a = csv.writer(file) 
    data = df['address'] 
    a.writerows(data) 

Während, wenn die ganze d zu exportieren versuchen, ata-frame gibt eine leere Datei zurück. Irgendwelche Hilfe, wie man den gesamten Datenrahmen in eine csv Akte exportiert ??

+1

Was zeigt df.dtypes die Datentypen Ihrer Spalten? – Kickaha

+0

Ich schätze, Sie brauchen diesen zweiten Koordinatensatz nicht. Konnten diese fallen gelassen werden? Eines der Probleme könnte sein, dass Pandas dies als eine andere Spalte liest. – pshep123

+0

Würdest du den gleichen Fehler bekommen, wenn du als 'xlsx' geschrieben hättest? Könnte es sein, dass Ihre Werte in der Spalte "Adresse" Kommas haben? – qbzenker

Antwort

1

Ich bin nicht mit Geolocator überhaupt vertraut, aber es scheint, dass Ihre Funktion eine Liste (oder Tupel) von Tupeln zurückgibt. Wenn Sie zurück stattdessen so etwas wie:

return ','.join(location[0]) 

die einen einzelnen String auf Ihre address Spalte zurückgeben soll, die csv leicht beschreibbar sein sollte.

+0

Ich habe es gerade versucht und es lässt mich mit dem folgenden Fehler: "TypeError: ('kann nur ein iterable', 'trat bei index 0 ') " – Mshendy

+0

Ok, vielleicht ist es schon ein String. Dann benutze 'return location [0]' und schau was passiert. – pshep123

+0

Jetzt funktioniert es perfekt. danke für deine Unterstützung – Mshendy

Verwandte Themen