如何用饼图绘制分类变量?处理DataFrame多值fruit列报错问题
解决方法
你遇到的错误是因为fruit列存储的是逗号分隔的字符串,直接调用df.plot(kind='pie', y='fruit')时,pandas无法将这类字符串数据转换为饼图所需的数值统计结果,从而触发类型比较错误。要实现每种单独水果的分布可视化,需要先对数据做拆分、展开和统计处理:
步骤1:拆分并展开水果数据
先把每个单元格里的逗号分隔字符串拆成列表,再用explode将列表中的每个元素单独占一行:
# 拆分字符串为列表 df['fruit'] = df['fruit'].str.split(', ') # 展开列表为单独行 expanded_df = df.explode('fruit')
步骤2:统计每种水果的出现频次
用value_counts()统计每个水果的出现次数:
fruit_counts = expanded_df['fruit'].value_counts()
步骤3:绘制饼图
基于统计后的频次数据绘制饼图:
fruit_counts.plot(kind='pie', autopct='%1.1f%%', title='水果分布')
完整代码示例
import pandas as pd import matplotlib.pyplot as plt # 模拟你的DataFrame data = {'fruit': ['apple, orange', 'banana', 'grapefruit, orange', 'apple, banana, kiwi']} df = pd.DataFrame(data) # 处理数据 df['fruit'] = df['fruit'].str.split(', ') expanded_df = df.explode('fruit') fruit_counts = expanded_df['fruit'].value_counts() # 绘制饼图 fruit_counts.plot(kind='pie', autopct='%1.1f%%', title='水果分布') plt.ylabel('') # 去掉默认的y轴标签 plt.show()
这样就能得到每种单独水果的占比饼图,解决之前的类型错误问题。
内容的提问来源于stack exchange,提问作者Tom Bomer
相关产品推荐
相关产品推荐

