Pandas 应用于数据框产生“<...的内置方法值”

Pandas apply to dateframe produces '<built-in method values of ...'

我正在尝试构建一个 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,我编写了以下函数来获取一系列词典:

def make_geojson(row): return {'geometry':row['geom'], 'properties':{'address':row['address']}}

我是这样应用的:

data['new_output'] = data.apply(make_geojson, axis=1)

我的结果列中充满了这些:<built-in method values of dict object at 0x10...

最奇怪的是,当我直接调用函数时(即 make_geojson(data.loc[0]) 我实际上得到了我期望的字典。也许更奇怪的是,当我调用函数时,我得到从应用程序(例如 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)

我得到这个 post 因为我 运行 遇到了类似的问题,但是当 运行 一个 PySpark DataFrame 而不是 Pandas.

如果有人像我一样在这里结束,我将解释我是如何为 PySpark DataFrame 修复它的。

我收到错误的原因(built-in method of Row object,在我的例子中)是因为我的字段名称 count 与从 python 元组继承的方法计数发生冲突(如所见 here)。

解决方案只是将字段名称更改为类似 my_count 的名称,并且效果很好。