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

