如何计算Pandas Series中盒子顶点坐标的中心并保留NaN值
解决方案:计算含NaN的Pandas Series中盒子的中心坐标
问题分析
你原函数的核心问题是直接用if arr_val:判断会在遇到NaN时触发错误——因为NaN属于float类型,无法直接转为布尔值进行判断。此外需要确保仅对有效嵌套列表数据执行均值计算,同时保留原Series中的NaN值。
修正后的实现代码
import pandas as pd import numpy as np def centroid(arr_val): # 先判断是否为NaN,是则直接返回 if pd.isna(arr_val): return np.nan # 处理有效嵌套列表:转为numpy数组后计算顶点均值 vertices = np.array(arr_val[0]) center = np.mean(vertices, axis=0) # 转为列表格式(匹配期望输出) return center.tolist() # 示例输入Series place = pd.Series([ [[[1,2], [3,4], [5,6], [7,8]]], [[[3,2], [6,4], [7,6], [2,8]]], np.nan ]) # 应用函数计算中心坐标 result = place.apply(centroid) print(result)
输出结果
0 [4.0, 5.0] 1 [4.5, 5.0] 2 NaN dtype: object
关键说明
- NaN判断:使用
pd.isna()精准识别Series中的NaN值,避免类型错误 - 嵌套列表处理:输入数据是三层嵌套(
[[[x1,y1], ...]]),所以取arr_val[0]提取出顶点的二维列表,再转为numpy数组计算均值 - 格式匹配:用
tolist()将numpy数组转为普通列表,和你期望的输出格式完全一致
内容的提问来源于stack exchange,提问作者cicciodevoto
相关产品推荐
相关产品推荐

