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

如何在Python中绘制含缺失值行位置的直方图(房价竞赛数据集)

解决Python中绘制缺失值行位置分布图的问题

你之前的代码train.isnull().sum(axis=1).plot(kind='hist', use_index=True)不符合预期的核心原因是:直方图(hist)的作用是统计不同缺失值数量的出现频次(比如统计有多少行包含0个缺失、1个缺失等),而你需要的是按行位置展示每行对应的缺失值数量,这是两种完全不同的可视化逻辑,use_index=True在直方图中也不会生效,因为直方图不会把行索引作为x轴维度。

要实现类似SAS的缺失值行位置可视化,你需要直接将行索引作为x轴,每行的缺失值数量作为y轴,用折线图或柱状图展示,以下是具体实现代码:

方法1:折线图(推荐,更清晰展示行位置趋势)

import matplotlib.pyplot as plt

# 计算每行的缺失值数量
row_missing_counts = train.isnull().sum(axis=1)

# 设置画布大小
plt.figure(figsize=(12, 6))
# 绘制行位置与缺失值数量的折线图,添加标记点增强可读性
plt.plot(row_missing_counts.index, row_missing_counts.values, marker='.', linestyle='-', markersize=2, alpha=0.6)
# 设置标签与标题
plt.xlabel('行索引')
plt.ylabel('该行缺失值数量')
plt.title('每行缺失值数量分布(按行位置)')
# 添加网格线辅助观察
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.show()

方法2:柱状图(还原类似SAS的直方图样式)

如果需要更贴近SAS的柱状展示形式,可以使用条形图:

import matplotlib.pyplot as plt

row_missing_counts = train.isnull().sum(axis=1)

plt.figure(figsize=(15, 6))
# 每个行对应一个柱子,宽度设为1避免间隙
plt.bar(row_missing_counts.index, row_missing_counts.values, width=1)
plt.xlabel('行索引')
plt.ylabel('该行缺失值数量')
plt.title('每行缺失值数量分布(按行位置)')
plt.show()

额外说明

如果需要同时查看缺失值数量的频次分布(即你之前代码生成的直方图)和行位置分布,可以将两个图放在同一画布中对比:

import matplotlib.pyplot as plt

row_missing_counts = train.isnull().sum(axis=1)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(18, 6))

# 左图:行位置缺失值分布
ax1.plot(row_missing_counts.index, row_missing_counts.values, marker='.', linestyle='-', markersize=2, alpha=0.6)
ax1.set_xlabel('行索引')
ax1.set_ylabel('缺失值数量')
ax1.set_title('按行位置的缺失值分布')
ax1.grid(axis='y', linestyle='--', alpha=0.7)

# 右图:缺失值数量的频次直方图
ax2.hist(row_missing_counts.values, bins=range(0, row_missing_counts.max()+2))
ax2.set_xlabel('每行缺失值数量')
ax2.set_ylabel('行数')
ax2.set_title('缺失值数量的频次分布')

plt.tight_layout()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:02