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

如何在Pandas DataFrame中将np.zeros(2)替换为np.NaN

解决DataFrame中替换np.zeros(2)数组为NaN的问题

问题根源

你之前用replace、eq等方法无效,是因为Pandas默认的元素比较针对标量或同结构数组的逐值匹配,但你的DataFrame里的元素是独立的numpy数组对象——即使两个数组内容全为0,它们的内存地址不同,直接用==比较会判断为不相等,所以无法匹配到目标数组。

解决方案:逐个元素检查内容

用applymap遍历DataFrame的每个元素,判断其是否为形状(2,)的全零numpy数组,满足条件则替换为np.nan:

import pandas as pd
import numpy as np

# 初始化你的DataFrame
df = pd.DataFrame({'x' : [np.zeros(2), np.array([1,2])], 'y' : [np.array([3,2]),0], 'z' : [np.array([4,5]),np.zeros(2)], 't' : [np.array([3,4]),np.array([4,5])]})

# 定义替换逻辑函数
def replace_zero_arr(val):
    if isinstance(val, np.ndarray) and val.shape == (2,) and (val == 0).all():
        return np.nan
    return val

# 应用到整个DataFrame
df = df.applymap(replace_zero_arr)

后续计算每行有效数组的均值

替换完成后,你可以通过apply遍历每行,筛选出非NaN、非标量0的数组,合并后计算均值:

def calculate_row_mean(row):
    # 筛选有效数组:排除NaN和标量0
    valid_arrs = [arr for arr in row if not pd.isna(arr) and arr != 0]
    if not valid_arrs:
        return np.nan
    # 合并所有有效数组并计算均值
    combined_arr = np.concatenate(valid_arrs)
    return combined_arr.mean()

# 生成每行均值
row_averages = df.apply(calculate_row_mean, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:52:13