You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算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

关键说明

  1. NaN判断:使用pd.isna()精准识别Series中的NaN值,避免类型错误
  2. 嵌套列表处理:输入数据是三层嵌套([[[x1,y1], ...]]),所以取arr_val[0]提取出顶点的二维列表,再转为numpy数组计算均值
  3. 格式匹配:用tolist()将numpy数组转为普通列表,和你期望的输出格式完全一致

内容的提问来源于stack exchange,提问作者cicciodevoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:15:05