我有一个这样的Pandas系列,名字place
:
0 [[[1,2], [3,4], [5,6], [7,8]]]
1 [[[3,2], [6,4], [7,6], [2,8]]]
2 nan
...
字符串
每行的元素是盒子的顶点的坐标。
我想找到盒子的中心,保持nan
的值,因为我想把这个系列连接到一个点阵,我需要相同的行数。
我最初的想法是写一个函数来计算平均值:
def centroid(arr_val):
if arr_val:
center = np.mean(np.array(arr_val[0]), axis=0)
else:
center = arr_val
return center
型
并将其应用于级数的每个元素:
place.apply(lambda x: centroid(x))
型
但是我对这个系列中的列表的尺寸有一些问题,因为它是一个列表的列表的列表。
我想要的是:
0 [4., 5.]
1 [4.5, 5. ]
2 nan
...
型
有什么建议吗?
2条答案
按热度按时间roejwanj1#
你的问题不是列表的尺寸,而是你没有正确地检查输入是否是
nan
。即使arr_val
是nan
,你的测试也通过了:字符串
打印
nan is truthy
。参见Why do "Not a Number" values equal True when cast as boolean in Python/Numpy?改变你的测试--给定你的数据,可能最简单的只是检查一个列表--将解决你的问题:
型
输出量:
型
fykwrbwg2#
IIUC,你可以构建
Polygon
s(* 如果有的话 *),然后计算geopandas提供的centroid
:字符串
一个变种与纯shapely ',使用其
centroid
:型
输出量:
型
使用的输入:
型