Pandas计算DataFrame行均值与标准差返回NaN问题求助
解决DataFrame每行均值/标准差返回NaN的问题
嘿,我一眼就看出问题出在哪了——你当前的代码是在计算列方向的均值,而不是每行的均值!这就是为什么mean列全是NaN的原因:当你执行df.mean(numeric_only=True)时,默认是按列(axis=0)计算,得到的是每个月份列的均值(一个Series),你把它赋值给整列df['mean'],因为维度不匹配,所以所有行都变成了NaN。
正确的解决方案
要计算每行的均值和标准差,只需要在mean()和std()方法中指定axis=1(行方向计算),同时明确选择需要计算的数值列(避免CellName这类非数值列干扰):
# 计算每行均值 df['mean'] = df.iloc[:, 1:].mean(axis=1, numeric_only=True) # 计算每行标准差 df['std'] = df.iloc[:, 1:].std(axis=1, numeric_only=True)
关键参数说明
axis=1:告诉Pandas沿着行的方向计算(即对每一行的所有数值列求均值/标准差),默认的axis=0是沿着列的方向计算,这是你之前的核心错误。df.iloc[:,1:]:明确选取从第2列开始的所有列(也就是你的四个月份列),虽然numeric_only=True会自动跳过非数值列,但这样写更直观,避免意外引入其他非数值列。
运行后的示例结果
执行上面的代码后,你的DataFrame会更新为:
| CellName | Apr-2018 | Feb-2018 | Jan-2018 | Mar-2018 | mean | std |
|---|---|---|---|---|---|---|
| BDG652ML_KPBENDULML1 | 9.450841 | 24.119474 | 27.091426 | 17.527006 | 19.547187 | 7.653432 |
| BDG652ML_KPBENDULML2 | 15.917555 | 10.548731 | 11.019208 | 14.592388 | 13.019471 | 2.464458 |
| BDG652ML_KPBENDULML3 | 24.957360 | 21.122519 | 21.197216 | 24.950549 | 23.056911 | 2.044735 |
这样就能得到你想要的每行均值和标准差啦!
内容的提问来源于stack exchange,提问作者Rehan Azher
相关产品推荐
相关产品推荐

