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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:02:34