【发布时间】:2015-08-21 17:37:09
【问题描述】:
我正在使用 GeoPandas 和 Pandas。 我有一个,比如说,300,000 行 Dataframe,df,有 4 列 + 索引列。
id lat lon geometry
0 2009 40.711174 -73.99682 0
1 536 40.741444 -73.97536 0
2 228 40.754601 -73.97187 0
但是唯一的 id 只是少数 (~200)
我想为每个 (lat,lon) 组合生成一个 shapely.geometry.point.Point 对象,类似于此处显示的内容:http://nbviewer.ipython.org/gist/kjordahl/7129098 (参见单元格#5), 它循环遍历数据框的所有行;但是对于这么大的数据集,我想将循环限制为更少的唯一 ID。
因此,对于给定的 id 值,idvalue(即第一行的 2009 年)创建 GeoSeries,并将其直接分配给 id==idvalue 的所有行
我的代码如下:
for count, iunique in enumerate(df.if.unique()):
sc_start = GeoSeries([Point(np.array(df[df.if==iunique].lon)[0],np.array(df[df.if==iunique].lat)[0])])
df.loc[iunique,['geometry']] = sc_start
但是事情不起作用 - 几何字段没有改变 - 我认为是因为 sc_start 的索引与 df 的索引不匹配。
我该如何解决这个问题?我应该在整个 df 中坚持循环吗?
【问题讨论】: