Pandas gelten für Datumsrahmen erzeugt '<eingebaute Methodenwerte von…'
Ich versuche ein @ zu bauGeoJSON Objekt. Meine Eingabe ist eine CSV mit einer Adressenspalte, einer Lat-Spalte und einer Lon-Spalte. Ich habe dann Shapely-Punkte aus den Koordinaten erstellt, sie mit einem bestimmten Radius gepuffert und das Koordinatenverzeichnis über die Mapping-Option abgerufen - soweit, so gut. Dann nach dem Verweis aufdiese Frag, Ich habe die folgende Funktion geschrieben, 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:
data['new_output'] = data.apply(make_geojson, axis=1)
eine resultierende Spalte ist voll von diesen:<built-in method values of dict object at 0x10...
Der seltsamste Teil ist, wenn ich die Funktion direkt aufrufe (d. H.make_geojson(data.loc[0])
Ich bekomme tatsächlich das Wörterbuch, das ich erwarte. Vielleicht ist es noch seltsamer, wenn ich die Funktionen aufrufe, die ich von der Anwendung erhalte (z. B.data.output[0]()
, data.loc[0]['output']()
) Ich erhalte 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 abrufen möchte.
Für diejenigen von Ihnen, die zu Hause mitspielen, hier ein Spielzeugbeispiel:
from shapely.geometry import Point, mapping
import pandas as pd
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
data = pd.DataFrame([{'address':'BS', 'lat':34.017, 'lon':-117.959}, {'address':'BS2', 'lat':33.989, 'lon':-118.291}])
data['point'] = map(Point, zip(data['lon'], data['lat']))
data['buffer'] = data['point'].apply(lambda x: x.buffer(.1))
data['geom'] = data.buffer.apply(mapping)
data['output'] = data.apply(make_geojson, axis=1)