Os pandas se aplicam ao dateframe produz '<valores internos do método de…'
Estou tentando construir umObjeto GeoJSON. Minha entrada é um csv com uma coluna de endereço, uma coluna lat e uma coluna lon. Criei pontos Shapely a partir das coordenadas, armazene-os em um determinado raio e obtenha o dicionário de coordenadas por meio da opção de mapeamento - até agora, tudo bem. Então, depois de se referir aessa questão, Escrevi a seguinte função para obter uma série de dicionários:
def make_geojson(row): return {'geometry':row['geom'], 'properties':{'address':row['address']}}
e eu apliquei assim:
data['new_output'] = data.apply(make_geojson, axis=1)
Minha coluna resultante está cheia destes:<built-in method values of dict object at 0x10...
A parte mais estranha é quando chamo diretamente a função (ou seja,make_geojson(data.loc[0])
Na verdade, eu entendo o dicionário que estou esperando. Talvez o mais estranho seja que, quando chamo as funções que recebo da aplicação (por exemplo,data.output[0]()
, data.loc[0]['output']()
) Recebo o equivalente da seguinte lista:[data.loc[0]['geom'], {'address':data.loc[0]['address']}]
, ou seja, os valores (mas não as chaves) do dicionário que estou tentando obter.
Para aqueles que tocam em casa, aqui está um exemplo de brinquedo:
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)