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

DataFrame使用列切片计算多列平均值生成新列时出现NaN的问题排查

问题分析与解决方案

嘿,我一眼就揪出你Case 2里的问题啦!

核心误区:搞混了loc的行/列索引逻辑

你写的 matrice_clean.loc['BL_SFI_01':'BL_SFI_03'] 是在按行索引切片,根本不是选列!

pandas里loc的规则是:.loc[行选择器, 列选择器],如果只传一个参数,默认是操作行。要是你的DataFrame行索引压根不是BL_SFI_01这类值,那这个切片返回的就是个空数据框,计算平均值自然全是NaN,而且因为没触发语法错误,所以连报错都没有,确实很坑人!

正确的列切片写法

给你两种靠谱的修正方式,随便选哪个都能解决问题:

方式1:用loc明确指定列范围

matrice_clean['BL_SFI_AV'] = matrice_clean.loc[:, 'BL_SFI_01':'BL_SFI_03'].mean(axis=1)

这里的:代表选中所有行,后面的'BL_SFI_01':'BL_SFI_03'才是你要的列范围,这样就能精准选中目标列计算每行平均值了。

方式2:直接列切片(更简洁)

如果你的这些列在DataFrame里是连续排列的,也可以直接这么写:

matrice_clean['BL_SFI_AV'] = matrice_clean['BL_SFI_01':'BL_SFI_03'].mean(axis=1)

这种写法和你Case1里的列表选列效果完全一致,但代码更短,前提是列名是有序且连续的哈。

为啥Case1能正常工作?

Case1里你用了matrice_clean[['BL_SFI_01','BL_SFI_02','BL_SFI_03']],这是直接给列名列表,pandas一眼就知道你要选列,所以能正确计算每行的平均值。


内容的提问来源于stack exchange,提问作者James S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:49:06