Pandas中DataFrame.mean()仅返回第一列均值,求助原因排查
问题:为什么DataFrame.mean(axis=0)只返回第一列的均值?
嘿,我之前也碰到过一模一样的问题!咱们先理清楚你的情况:
你写的代码是这样的:
df = pd.read_csv("aps.csv") df.replace('na', np.NaN, inplace=True) print(df.mean(axis=0))
但运行后只得到第一列的均值输出:
aa_000 59336.499567 dtype: float64
核心原因
Pandas的mean()方法只会对数值类型的列(int、float等)计算均值,如果其他列是object(字符串)类型,就会被自动跳过。出现这个情况,大概率是:
- 你的CSV文件里,除了第一列之外,其他列还包含非数值的内容(比如除了'na'之外的其他字符串、特殊符号)
- 你用
replace('na', np.NaN)没有把所有非数值的缺失值都处理掉,导致这些列仍然保持object类型,Pandas无法识别为可计算的数值列。
解决步骤
- 先检查列的数据类型,确认哪些列不是数值型:
print(df.dtypes)
运行后你会看到,没被计算均值的列类型都是object。
- 将所有列转换为数值类型,用
pd.to_numeric()强制把无法转换的内容转为NaN(比单独替换'na'更全面):
# 对整个DataFrame的所有列进行转换 df = df.apply(pd.to_numeric, errors='coerce')
如果只想处理特定列,也可以单独指定:
df['target_column'] = pd.to_numeric(df['target_column'], errors='coerce')
- 再次计算均值,这时所有数值列的均值都会被返回:
print(df.mean(axis=0))
补充说明
pd.to_numeric的errors='coerce'参数会把所有无法转为数值的内容(比如'NA'、空字符串、特殊字符)都转为NaN,这样Pandas在计算均值时会自动忽略这些缺失值,确保所有原本应该是数值的列都能被正确计算。
内容的提问来源于stack exchange,提问作者Adel
相关产品推荐
相关产品推荐

