Las pandas que se aplican al marco de fecha producen ‘<valores de método incorporados de …'

Estoy tratando de construir un objeto GeoJSON . Mi entrada es un csv con una columna de dirección, una columna de lat y una columna de lon. Luego creé que Shapely señala las coordenadas, las almacena en un radio determinado y obtiene el diccionario de coordenadas a través de la opción de mapeo, hasta ahora, todo bien. Luego, luego de referirme a esta 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...

Lo más extraño es que cuando llamo directamente a la función (es decir, make_geojson(data.loc[0]) , de hecho, obtengo el diccionario que estoy esperando. Tal vez lo más extraño es que, cuando llamo a las funciones que recibo de la aplicación (por ejemplo, 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 estoy tratando de 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) 

Gracias, DSM, por señalarlo. Lección aprendida: los pandas no son buenos para objetos Python arbitrarios

Así que esto es lo que terminé haciendo:

 temp = zip(list(data.geom), list(data.address)) output = map(lambda x: {'geometry': x[0], 'properties':{'address':x[1]}}, temp) 

Llegué a esta publicación porque tuve un problema similar, pero cuando ejecuté un DataSrame de PySpark en lugar de Pandas.

En caso de que alguien termine aquí, como yo, explicaré cómo lo arreglé para un DataSrame de PySpark.

La razón por la que recibí el error (el built-in method of Row object , en mi caso), fue porque mi count nombre de campo estaba colisionando con la cuenta del método heredado de las tuplas de python (como se ve aquí ).

La solución fue simplemente cambiar el nombre del campo a algo como my_count y funcionó bien.