Los pandas se aplican al marco de fecha y produce '<valores de método integrados de ...'
Estoy tratando de construir unObjeto GeoJSON. Mi entrada es un csv con una columna de dirección, una columna lat y una columna lon. Luego creé puntos Shapely a partir de las coordenadas, los amortigué en un radio determinado y obtuve el diccionario de coordenadas a través de la opción de mapeo, hasta ahora, todo bien. Luego, después de referirme aesta pregunta, Escribí la siguiente función para obtener una serie de diccionarios:
def make_geojson(row): return {'geometry':row['geom'], 'properties':{'address':row['address']}}
y lo apliqué así:
data['new_output'] = data.apply(make_geojson, axis=1)
Mi columna resultante está llena de estos:<built-in method values of dict object at 0x10...
La parte más extraña es cuando llamo directamente a la función (es decirmake_geojson(data.loc[0])
De hecho, obtengo el diccionario que estoy esperando. Quizás aún más extraño es eso, cuando llamo a las funciones que obtengo de la aplicación (p. Ej.data.output[0]()
, data.loc[0]['output']()
) Obtengo el equivalente de la siguiente lista:[data.loc[0]['geom'], {'address':data.loc[0]['address']}]
, es decir, los valores (pero no las claves) del diccionario que intento obtener.
Para aquellos de ustedes que juegan en casa, aquí hay un ejemplo de juguete:
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)