Seite 1 von 1
geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 10:19
von m__golbs
Hallo,
ich versuche über
Code: Alles auswählen
import pandas as pd
import geopandas as gpd
import numpy as np
import os
import sys
track_in = "2023-06-08-0006.gpx"
track_out = "2023-06-08-0006_test.gpx"
gdf = gpd.read_file(track_in, layer='track_points')
..
ein gpx File in Geopandas zu laden. Leider kommt bei gesamten gpx File die Meldung:
Code: Alles auswählen
AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Reduziere ich den Umfang des gpx Files auf ca. 10% läuft der Code.
Code: Alles auswählen
Ausgabe
track_fid track_seg_id track_seg_point_id ele time fix hdop gpxtpx_TrackPointExtension geometry
0 0 0 0 0.0 2023-05-02 17:04:06 3d 2.11 <gpxtpx:speed>0.02</gpxtpx:speed> <... POINT (-77.14533 -12.05045)
1 0 0 1 0.0 2023-05-02 17:04:07 3d 2.11 <gpxtpx:speed>0.02</gpxtpx:speed> <... POINT (-77.14507999999999 -12.05025)
2 0 0 2 0.0 2023-05-02 17:04:08 3d 2.11 <gpxtpx:speed>0.02</gpxtpx:speed> <... POINT (-77.145 -12.05008)
3 0 0 3 0.0 2023-05-02 17:04:09 3d 2.11 <gpxtpx:speed>0.02</gpxtpx:speed> <... POINT (-77.1451 -12.05003)
4 0 0 4 0.0 2023-05-02 17:04:10 3d 2.11 <gpxtpx:speed>0.02</gpxtpx:speed> <... POINT (-77.1454 -12.05017)
RAM & Co sind ausreichend. Muss man Geopandas bezüglich Ressource irgend wie parametrieren?
Gruß Markus
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 10:47
von __deets__
Bitte den *gesamten* Stacktrace zeigen, nicht einen Ausschnitt. Denn so kann man nicht erkennen, wo genau es hakt.
Die Glaskugel vermutet, dass deine Daten Werte enthalten, die von Pandas nicht automatisch verarbeitet werden koennen (Zeitstempel gerne, oder numerische Werte), und etwas Hilfe braucht. Oder die Daten repariert werden muessen. Mit Speicher hat das eher nicht zu tun, soviel kannst du garnicht laufen, wie der Rechner Speicher hat.
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 10:58
von m__golbs
Hallo,
nicht automatisch verarbeitet werden koennen (Zeitstempel gerne, oder numerische Werte),
War ursprünglich auch meine Vermutung. Nur 1.2E06 Zeilen in der gpx sind halt nicht wirklich einfach bezüglich dieser Fehler zu überblicken. Muss mir da mal Gedanken machen, eventuell Bereiche separieren, separat laufen lassen, damit problematische Stelle suchen.
Code: Alles auswählen
Traceback (most recent call last):
File "2023-06-08-1.py", line 19, in <module>
gdf = gpd.read_file(track_in, layer='track_points')
File "/usr/lib/python2.7/dist-packages/geopandas/io/file.py", line 76, in read_file
gdf = GeoDataFrame.from_features(f_filt, crs=crs, columns=columns)
File "/usr/lib/python2.7/dist-packages/geopandas/geodataframe.py", line 227, in from_features
for f in features_lst:
File "fiona/ogrext.pyx", line 1353, in fiona.ogrext.Iterator.__next__
File "fiona/ogrext.pyx", line 253, in fiona.ogrext.FeatureBuilder.build
File "/usr/lib/python2.7/logging/__init__.py", line 1207, in exception
self.error(msg, *args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py", line 1200, in error
self._log(ERROR, msg, args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py", line 1293, in _log
self.handle(record)
File "/usr/lib/python2.7/logging/__init__.py", line 1302, in handle
if (not self.disabled) and self.filter(record):
File "/usr/lib/python2.7/logging/__init__.py", line 617, in filter
if not f.filter(record):
File "/usr/lib/python2.7/dist-packages/fiona/logutils.py", line 18, in filter
if getattr(record, 'msg', "").startswith("Skipping field"):
AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Habe jetzt mal das 1.2E06 Zeilen gpx File in zwei unterschiedliche "GPS" Programmen eingeladen. Beide Programme zeigen die Daten aus den gpx Informationen korrekt an ohne irgend wie zu meckern. Der Syntax der gpx scheint offensichtlich keine ganz groben Fehler zu haben. Werde weiter suchen....
Gruß und Dank Markus
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 11:18
von __blackjack__
Bevor Du da nach einem Fehler suchst: Python 2.7‽ Was sind denn das sonst noch so für Versionen von den beteiligten Packages, denn alles in dem Traceback scheint ja von der Linux-Distribution zu kommen.
Der Fehler scheint im `fiona`-Package zu liegen das versucht im `fiona.ogrext`-Modul statt einer Zeichenkette ein `ValueError`-Objekt zu loggen. Wenn es diesen Fehler nicht hätte, wüsste man wenigstens wo der eigentliche Fehler, der `ValueError` her kommt.
Edit: Der konkrete Fehler in `ogrext` ist dieser hier, und seit `fiona` 1.8.21 behoben:
https://github.com/Toblerity/Fiona/issues/1035
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 11:23
von m__golbs
Hallo,
ja, leider Python2.7, da ein benötigtes Paket für die Gesamtaufgabe in 3.x noch nicht zur Verfügung steht. Ich werde mal den Geopandas Teil in 3.x bringen, damit testen. Dann ist der Fehler wenigstens ausgeschlossen.
Habe leider 1.8.4-1+b1 fiona drauf. Muss dass dann wohl mal in einer env und pip versuchen...
Gruß und Dank Markus
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 12:01
von sparrow
@m__golbs: Welches Paket steht noch nicht für 3.x zur Verfügung? Wenn das bis jetzt nicht zur Verfügung steht, wird es eng.
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 14:10
von m__golbs
Hallo,
elevation läuft bei mir nach pip nur mit 2.7, nicht mit 3.7. Kann auch sein, dass ich da was falsch mache.
Gruß Markus
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 14:21
von sparrow
Laut PyPI ist
das Modul 3.6 - 3.9 verfügbar.
Versuch das Setup auf 3.x, ich würde 3.9 vorschlagen, aufzubauen. Wenn du Probleme hast: Frag.
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Freitag 9. Juni 2023, 14:36
von __blackjack__
@m__golbs: Wie äussert sich das? Und hast Du für Python 3 auch explizit die gleiche Version von `elevation` installiert wie für Python 2? Die letzte die für beide Python-Versionen funktioniert ist die 1.0.6 laut Dokumentation.
Re: geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'
Verfasst: Montag 12. Juni 2023, 07:48
von m__golbs
Hallo,
mit python2.7 lief es, mit python3.7 wurde es als fehlend gemeldet. Habe jetzt aber erst mal mein Debian auf 11 gebracht, damit neuere Versionen drauf, teilweise aus pip bezogen...
Jetzt muss ich mal schauen, was sich in geopandas verändert hat. Mit der alten Umgebung lief das schon mal ohne die Fehlermeldung KeyError: 'time'.
Code: Alles auswählen
jhtfdg@debian8-amd64:$ python3.9 2023-06-08-1.py
Ausgabe
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/pandas/core/indexes/base.py", line 2898, in get_loc
return self._engine.get_loc(casted_key)
File "pandas/_libs/index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'time'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File " 2023-06-08-1.py ", line 22, in <module>
gdf['time'] = pd.to_datetime(gdf['time'])
File "/usr/local/lib/python3.9/dist-packages/geopandas/geodataframe.py", line 1475, in __getitem__
result = super().__getitem__(key)
File "/usr/lib/python3/dist-packages/pandas/core/frame.py", line 2906, in __getitem__
indexer = self.columns.get_loc(key)
File "/usr/lib/python3/dist-packages/pandas/core/indexes/base.py", line 2900, in get_loc
raise KeyError(key) from err
KeyError: 'time'
jhtfdg@debian8-amd64:$
Gruß Markus