Ich versuche ein GeoJSON-Objekt zu erstellen. Meine Eingabe ist ein CSV mit einer Adressspalte, einer Lat-Spalte und einer Lon-Spalte. Ich habe dann formschöne Punkte aus den Koordinaten erstellt, sie um einen bestimmten Radius gepuffert und das Koordinatenwörterbuch über die Mapping-Option erhalten - so weit, so gut. Dann, nachdem ich auf diese Frage eingegangen bin, schrieb ich die folgende Funktion, um eine Reihe von Wörterbüchern zu erhalten:
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
und ich habe es so angewendet:
%Vor% Meine resultierende Spalte ist voll von diesen: <built-in method values of dict object at 0x10...
Der seltsamste Teil ist, wenn ich die Funktion direkt anrufe (zB make_geojson(data.loc[0])
Ich bekomme tatsächlich das Wörterbuch, das ich erwarte. Vielleicht noch seltsamer ist das, wenn ich die Funktionen, die ich bekomme, von der Anwendung abrufe ( zB data.output[0]()
, data.loc[0]['output']()
) Ich bekomme das Äquivalent der folgenden Liste:
[data.loc[0]['geom'], {'address':data.loc[0]['address']}]
, d. h. die Werte (aber nicht die Schlüssel) des Wörterbuchs, das ich zu bekommen versuche.
Für diejenigen von euch, die zu Hause mitspielen, hier ist ein Spielzeugbeispiel:
%Vor%Danke, DSM, um das zu verdeutlichen. Lektion gelernt: Pandas ist nicht gut für beliebige Python-Objekte
Das habe ich also gemacht:
%Vor%Ich kam zu diesem Post, weil ich auf ein ähnliches Problem stieß, aber wenn ich einen PySpark DataFrame anstelle von Pandas ausführte.
Falls jemand hier landet, wie ich, werde ich erklären, wie ich es für einen PySpark DataFrame repariert habe.
Der Grund, warum ich den Fehler bekam ( built-in method of Row object
, in meinem Fall), war, weil mein Feldname count
mit der geerbten Methodenanzahl von Python-Tupeln kollidierte (wie gesehen hier ).
Die Lösung war einfach, den Namen des Feldes in etwas wie my_count
zu ändern, und es funktionierte gut.