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