python – 适用于dateframe的Pandas生成’<内置方法值...'
作者:互联网
我正在尝试构建一个GeoJSON object.我的输入是一个带有地址列,lat列和lon列的csv.然后,我从坐标中创建了Shapely点,用给定的半径缓冲它们,并通过映射选项获得坐标字典 – 到目前为止,非常好.然后,在参考this question之后,我编写了以下函数来获得一系列字典:
def make_geojson(row):
return {‘geometry’:row [‘geom’],’properties’:{‘address’:row [‘address’]}}
我这样应用了它:
data['new_output'] = data.apply(make_geojson, axis=1)
我的结果列充满了这些:< dict对象的内置方法值在0x10 ...
最奇怪的部分是,当我直接调用函数(即make_geojson(data.loc [0])时,我确实得到了我期待的字典.甚至更奇怪的是,当我调用我得到的函数时apply(例如data.output [0](),data.loc [0] [‘output’]())我得到以下列表的等价物:
[data.loc [0] [‘geom’],{‘address’:data.loc [0] [‘address’]}],即我想要获取的字典的值(但不是键) .
对于那些在家里玩的人来说,这是一个玩具示例:
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)
解决方法:
谢谢,DSM,指出了这一点.获得的经验:pandas不适合任意Python对象
所以这就是我最后做的事情:
temp = zip(list(data.geom), list(data.address))
output = map(lambda x: {'geometry': x[0], 'properties':{'address':x[1]}}, temp)
标签:geojson,shapely,python,pandas,apply 来源: https://codeday.me/bug/20191008/1869762.html