I'm trying to build a GeoJSON object. My input is a csv with an address column, a lat column, and a lon column. I then created Shapely points out of the coordinates , buffer them out by a given radius, and get the dictionary of coordinates via the mapping option- so far, so good. Then, after referring to this question, I wrote the following function to get a Series of dictionaries:
def make_geojson(row):
return {'geometry':row['geom'], 'properties':{'address':row['address']}}
and I applied it thusly:
data['new_output'] = data.apply(make_geojson, axis=1)
My resulting column is full of these: <built-in method values of dict object at 0x10...
The weirdest part is, when I directly call the function (i.e. make_geojson(data.loc[0])
I do in fact get the dictionary I'm expecting. Perhaps even weirder is that, when I call the functions I'm getting from the apply (e.g. data.output[0]()
, data.loc[0]['output']()
) I get the equivalent of the following list:
[data.loc[0]['geom'], {'address':data.loc[0]['address']}]
, i.e. the values (but not the keys) of the dictionary I'm trying to get.
For those of you playing along at home, here's a toy example:
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)