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

如何用Pandas绘制指定列饼图?含缺失值的两种场景实现

问题描述

我有一个包含多列的DataFrame df,其中df["house_electricity"]列包含1、0、空值/NA三种取值。需要绘制两种饼图:

  • 第一种仅展示1和0的占比;
  • 第二种展示1、0及空值/NA的全部占比。

尝试了如下代码但未得到预期结果,附示例数据及尝试代码:

示例数据

customer_idhouse_electricityhouse_refrigerator
cid0100
cid021na
cid031
cid041
cid05na0

尝试的代码

# 我写了以下代码但未得到预期结果
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("my_file.csv")

df_col = df.columns

df["house_electricity"].plot(kind="pie")

解决方案

你之前的代码问题在于直接对整列画饼图,pandas会把每一行的数值当成独立切片,而非统计不同取值的占比。需要先预处理数据、统计频次,再绘制饼图:

1. 正确读取并预处理数据

首先要把CSV里的文本型na和空字符串统一转为pandas可识别的NaN,否则空值统计会出错:

import pandas as pd
import matplotlib.pyplot as plt

# 读取CSV,将"na"和空字符串转为NaN
df = pd.read_csv("my_file.csv", na_values=["na", ""])

2. 绘制仅包含1和0的饼图

先过滤空值,再统计1和0的出现频次:

# 过滤空值,只保留1和0的数据
filtered_data = df["house_electricity"].dropna()
# 统计1和0的频次
counts_0_1 = filtered_data.value_counts()

# 绘制饼图
plt.figure(figsize=(6,6))
counts_0_1.plot(kind="pie", autopct="%.1f%%", labels=["1", "0"], title="仅1和0的占比")
plt.ylabel("")  # 去掉默认y轴标签,让图表更简洁
plt.show()

3. 绘制包含1、0及空值的饼图

用value_counts(dropna=False)可以把空值纳入统计:

# 统计所有取值(包含空值)的频次
counts_all = df["house_electricity"].value_counts(dropna=False)
# 给空值重命名为更清晰的标签
counts_all = counts_all.rename({pd.NA: "空值/NA"})

# 绘制饼图
plt.figure(figsize=(6,6))
counts_all.plot(kind="pie", autopct="%.1f%%", title="1、0及空值的全部占比")
plt.ylabel("")
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:10:14