geopandas + gpx Import >> AttributeError: 'exceptions.ValueError' object has no attribute 'startswith'

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
m__golbs
User
Beiträge: 5
Registriert: Freitag 9. Juni 2023, 10:12

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
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
m__golbs
User
Beiträge: 5
Registriert: Freitag 9. Juni 2023, 10:12

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
Zuletzt geändert von m__golbs am Freitag 9. Juni 2023, 11:19, insgesamt 1-mal geändert.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
m__golbs
User
Beiträge: 5
Registriert: Freitag 9. Juni 2023, 10:12

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
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@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.
m__golbs
User
Beiträge: 5
Registriert: Freitag 9. Juni 2023, 10:12

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
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
m__golbs
User
Beiträge: 5
Registriert: Freitag 9. Juni 2023, 10:12

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
Antworten