Exporting Python Data to GeoJSON

I like to do my data wrangling and analysis work in Python, using the pandas library. I also use Python for much of my data visualization and simple mapping. But for interactive web maps, I usually use Leaflet. There isn’t dead-simple way to dump a pandas DataFrame with geographic data to something you can load with Leaflet. You could use GeoPandas to convert your DataFrame then dump it to GeoJSON, but that isn’t a very lightweight solution.

So, I wrote a simple reusable function to export any pandas DataFrame to GeoJSON:

def df_to_geojson(df, properties, lat='latitude', lon='longitude'):
    geojson = {'type':'FeatureCollection', 'features':[]}
    for _, row in df.iterrows():
        feature = {'type':'Feature',
                   'properties':{},
                   'geometry':{'type':'Point',
                               'coordinates':[]}}
        feature['geometry']['coordinates'] = [row[lon],row[lat]]
        for prop in properties:
            feature['properties'][prop] = row[prop]
        geojson['features'].append(feature)
    return geojson

You just pass the function a DataFrame, a list of columns to convert to GeoJSON feature properties, and optionally which columns contain the latitude and longitude data. You can use it like this:

cols = ['street_address', 'issue_type', 'status']
geojson = df_to_geojson(df, cols)

And you can easily save it to a .js file for loading into Leaflet, like this:

output_filename = 'dataset.js'
with open(output_filename, 'wb') as output_file:
    output_file.write('var dataset = ')
    json.dump(geojson, output_file, indent=2) 

I have a demonstration of this simple function in a Jupyter Notebook that processes data from an API and spits it out in GeoJSON format for Leaflet, in this GitHub repo.

3 thoughts on “Exporting Python Data to GeoJSON”

Leave a Reply

Your email address will not be published. Required fields are marked *