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

如何将df.describe().loc['top']和freq数据绘制成饼图?解决报错

解决Pandas饼图绘制时的列索引错误问题

咱们先拆解一下你遇到的问题,核心是DataFrame构建逻辑不对,加上plot.pie的参数用错了,才导致了找不到列的报错。

问题出在哪?

你原来的代码里:

df = pd.DataFrame({'Top answers': [df.describe().loc['top']], 'Frequency': [df.describe().loc['freq']]}, index=['Most Common answer', 'Frequency'])

这里犯了两个关键错误:

  1. 把df.describe().loc['top']和df.describe().loc['freq']这两个Series对象(每个对应原数据所有列的统计结果)当成单个元素塞进了列表,导致新DataFrame的结构完全混乱。
  2. 错误设置了索引为['Most Common answer', 'Frequency'],这让DataFrame的行和列逻辑完全颠倒了。

后面调用plot.pie(y=df.describe().loc['freq'])时,你传入的是具体的频次数值,而plot.pie的y参数要求的是DataFrame的列名,自然会报“找不到对应列”的错误。


正确的解决方案(分两步)

假设你的原df是调研数据,每一列对应一个调研问题,df.describe().loc['top']是每个问题的最常见答案,df.describe().loc['freq']是对应频次,我们可以这么处理:

1. 正确构建统计结果的DataFrame

直接把两个Series合并成结构清晰的新DataFrame,行对应原数据的调研问题,列对应“最常见答案”和“频次”:

import pandas as pd

# 提取统计数据:每个调研问题的最常见答案和对应频次
top_answers = df.describe().loc['top']
answer_freqs = df.describe().loc['freq']

# 构建正确的DataFrame
stats_df = pd.DataFrame({
    'Top answers': top_answers,
    'Frequency': answer_freqs
})

2. 绘制饼图

现在用stats_df绘制饼图,指定y为频次列的列名,还可以用最常见答案作为饼图的标签:

# 绘制饼图,显示每个问题最常见答案的频次占比
pie_plot = stats_df.plot.pie(
    y='Frequency',
    labels=stats_df['Top answers'],
    figsize=(5, 5),
    autopct='%1.1f%%',  # 可选:显示百分比
    title='Most Common Answers Frequency Distribution'
)

额外提醒:如果想绘制单个问题的所有答案分布

如果你其实是想针对某一个调研问题(比如原df中的'satisfaction'列),展示所有答案的占比饼图,那更简单,直接对该列做频次统计后绘图即可:

# 针对单个调研问题绘制所有答案的饼图
df['satisfaction'].value_counts().plot.pie(
    figsize=(5,5),
    autopct='%1.1f%%',
    title='Satisfaction Response Distribution'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:57:41