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

Python Pandas按行计算方差返回NaN问题求助

问题解决方法

你用df.var(axis=1)得到NaN的原因有两个:

  1. df.var(axis=1)仅支持对数值型列按行计算方差,但你的b列是列表对象,pandas无法将其识别为可计算的数值数组,计算时会直接忽略该列;
  2. 单独的a列是单个数值,单值的方差因自由度为0无法计算,返回NaN。

根据你的需求,分两种情况给出解决方案:

情况1:计算b列中每个列表的方差

使用apply结合numpy.var处理,同时兼容单元素列表的场景:

import pandas as pd
import numpy as np

df = pd.DataFrame({"a" : [1,2,3], "b" : [[1,2],[2,3,4],[5]]})

# 计算总体方差,单元素列表返回0(可根据需求改为np.nan)
df['b_var'] = df['b'].apply(lambda x: np.var(x) if len(x) >= 2 else 0)

# 如果需要样本方差(自由度为n-1),修改为:
# df['b_var_sample'] = df['b'].apply(lambda x: np.var(x, ddof=1) if len(x) >=2 else 0)

执行后结果:

a          b  b_var
0  1     [1, 2]    0.25
1  2  [2, 3, 4]    0.666667
2  3        [5]    0.0

情况2:合并a列数值与b列列表,计算每行的整体方差

先将每行的a值与b列表合并为新列表,再计算方差:

df['combined_var'] = df.apply(
    lambda row: np.var([row['a']] + row['b']) if len([row['a']] + row['b']) >=2 else 0,
    axis=1
)

执行后结果:

a          b  combined_var
0  1     [1, 2]       0.111111
1  2  [2, 3, 4]       0.5
2  3        [5]       0.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:15:49