Matplotlib绘制DataFrame数据异常:房价与房型关联柱状图错误排查
柱状图展示房价与房型数量关联的异常问题解决
问题根源
你现在的代码直接把每条数据的价格对应房型数量画柱状图,这会导致同一房型数量下的所有价格数据重叠/堆叠显示,完全不是你想要的「不同房型数量对应的平均房价」——Excel统计的是平均价,但你的图表展示的是所有原始数据的价格点,比如1间客厅的公寓里可能有个别天价房源,这些异常值直接拉高了视觉上的高度,才出现和统计结果相反的情况。
代码里的具体错误
dataFrame.replace('', np.nan)这行没赋值,等于白写,空值不会被替换成NaN,后续dropna可能没起到清理空值的作用,应该改成dataFrame = dataFrame.replace('', np.nan)- 核心问题:没先按房型数量分组计算平均房价,直接用原始数据绘图,导致同一房型下的所有价格都被绘制,数据重叠后视觉效果完全失真
修正后的代码
先分组计算每种房型对应的平均房价,再绘图,就能和你Excel统计的结果匹配了:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 读取并处理数据 dataFrame = pd.read_csv('dataset.csv', sep=',') # 替换空值并赋值,否则操作不生效 dataFrame = dataFrame.replace('', np.nan) # 提取目标列并删除含空值的行 roomsDF = dataFrame[['Price', 'Living Rooms', 'Halls', 'Bathrooms']].dropna(axis='rows') # 按房型分组计算平均房价 living_room_avg = roomsDF.groupby('Living Rooms')['Price'].mean() halls_avg = roomsDF.groupby('Halls')['Price'].mean() bathrooms_avg = roomsDF.groupby('Bathrooms')['Price'].mean() # 绘制子图 plt.figure(figsize=(12, 4)) plt.subplot(131) plt.bar(living_room_avg.index, living_room_avg.values, color='darkgreen') plt.title('平均房价 vs 客厅数量') plt.xlabel('客厅数量') plt.ylabel('平均房价') plt.subplot(132) plt.bar(halls_avg.index, halls_avg.values, color='limegreen') plt.title('平均房价 vs 门厅数量') plt.xlabel('门厅数量') plt.ylabel('平均房价') plt.subplot(133) plt.bar(bathrooms_avg.index, bathrooms_avg.values, color='seagreen') plt.title('平均房价 vs 浴室数量') plt.xlabel('浴室数量') plt.ylabel('平均房价') plt.tight_layout() # 自动调整子图间距,避免标签重叠 plt.savefig('Picture')
内容的提问来源于stack exchange,提问作者teabussin
相关产品推荐
相关产品推荐

