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.
相关产品推荐
相关产品推荐

