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

为何Numpy计算的均值与Excel结果不一致?如何修复?

问题描述

我的数据集filtered_test.xlsx包含美国部分酒店的评分等信息,需按酒店名称分组计算评分均值,且已提前剔除数据中的0值与NaN值。使用以下代码计算:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 

from matplotlib import rcParams #for chart


df = pd.read_excel("filtered_test.xlsx")

#Creates the average hotel ratings by hotel name
hotel_rating = df.groupby('name') ['reviews.rating'].mean().reset_index()
hotel_rating.to_excel("hotel_ratings.xlsx", index = False)
hotelRating_df = pd.read_excel("hotel_ratings.xlsx")

但计算出的均值与Excel手动计算结果不匹配,例如某酒店仅一条评分为4的数据,计算得出的均值却不是4。

修复方案

1. 检查并修正评分列的数据类型

Pandas读取Excel时可能将reviews.rating列识别为字符串(object类型),导致均值计算逻辑异常。先验证数据类型:

print(df['reviews.rating'].dtype)

若输出为object,将其转换为数值型并清理异常值:

df['reviews.rating'] = pd.to_numeric(df['reviews.rating'], errors='coerce')
# 剔除转换后产生的NaN值,同时确保无0值
df = df[(df['reviews.rating'] != 0) & df['reviews.rating'].notna()]

2. 验证目标酒店的原始数据

针对出现问题的酒店,直接查看分组前的原始数据,确认是否真的只有一条评分为4的记录:

# 替换为出现问题的酒店名称
target_hotel = df[df['name'] == "XX酒店"]
print(target_hotel['reviews.rating'])

检查输出结果中是否存在隐藏的空值、字符串或其他异常数值。

3. 简化计算流程,避免二次读写Excel

当前代码写完Excel文件后又重新读取,可能引入不必要的问题。直接使用计算后的结果即可:

import pandas as pd

df = pd.read_excel("filtered_test.xlsx")
# 预处理评分列
df['reviews.rating'] = pd.to_numeric(df['reviews.rating'], errors='coerce')
df = df[(df['reviews.rating'] != 0) & df['reviews.rating'].notna()]
# 分组计算均值
hotel_rating = df.groupby('name')['reviews.rating'].mean().reset_index()
# 保存结果
hotel_rating.to_excel("hotel_ratings.xlsx", index=False)
# 直接查看目标酒店结果
print(hotel_rating[hotel_rating['name'] == "XX酒店"])

4. 核对Excel手动计算的准确性

确认Excel中筛选的酒店数据范围与代码处理的数据集完全一致,检查是否存在漏选行、计算范围错误等情况。


内容的提问来源于stack exchange,提问作者heyshh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:16:00