计算DataFrame行均值时非NaN行仍返回NaN的问题排查
问题分析与解决方法
核心原因与对应解法
1. axis参数方向错误(最常见)
你写的axis=0是计算列的均值,而非行的均值。要计算每行的均值,必须指定axis=1。这是新手最容易踩的坑,修改参数后大概率能解决问题:
# 假设cols是排除时间戳后的数值列集合 df['行均值'] = df[cols].mean(axis=1, skipna=True)
2. 列选择逻辑有误
如果df[]未明确指定正确的列——比如不小心选中空列集合,或者误将时间戳列纳入计算范围——自然无法得到有效均值。
- 先明确列范围:比如首列名为
timestamp,可通过cols = df.columns[1:]或cols = df.columns.drop('timestamp')选中所有数值列。 - 用
df[cols].info()查看列的非空值统计,用df[cols].head()预览数据,确认选中的是正确的数值列。
3. 数据存在隐藏问题
虽然列类型显示为float64,但可能存在以下情况:
- 部分列全为NaN:用
df[cols].isna().sum()统计每列的NaN数量,过滤掉全NaN的列后再计算:# 筛选出至少有一个非空值的列 valid_cols = df[cols].columns[df[cols].notna().any(axis=0)] df['行均值'] = df[valid_cols].mean(axis=1, skipna=True) - 存在字符串形式的"NaN":这种值虽显示为float64,但实际是无效值,可强制转换为标准NaN后再计算:
df[cols] = df[cols].apply(pd.to_numeric, errors='coerce')
内容的提问来源于stack exchange,提问作者user34482
相关产品推荐
相关产品推荐

