如何为DataFrame的数据类型绘制饼图?解决TypeError报错
可视化数据集数据类型饼图的报错解决
问题场景
现有如下行星数据集:
import pandas as pd df_planet = pd.DataFrame({'mass': [0.330, 4.87 , 5.97], 'radius': [2439.7, 6051.8, 6378.1], 'planet': ['Mercury', 'Venus', 'Earth']})
查看数据类型:
df_planet.dtypes # 输出: # mass float64 # radius float64 # planet object # dtype: object
想要绘制数据类型占比的饼图(66.67% float64、33.33% object),但执行以下代码时报错:
import matplotlib.pyplot as plt plt.pie(df_planet.dtypes, autopct='%.0f%%')
错误信息:
TypeError: float() argument must be a string or a number, not 'numpy.dtype[float64]'
报错原因
plt.pie()要求传入数值型数据作为各扇区的大小,但df_planet.dtypes返回的是numpy.dtype对象序列,不是每种类型的计数,因此无法被转换为浮点数用于绘图。
解决方法
先统计每种数据类型的出现次数,再将统计结果传给plt.pie():
完整实现代码
import pandas as pd import matplotlib.pyplot as plt # 创建数据集 df_planet = pd.DataFrame({'mass': [0.330, 4.87 , 5.97], 'radius': [2439.7, 6051.8, 6378.1], 'planet': ['Mercury', 'Venus', 'Earth']}) # 统计数据类型的频次 type_counts = df_planet.dtypes.value_counts() # 绘制饼图 plt.pie(type_counts.values, labels=type_counts.index, autopct='%.2f%%') plt.title('Dataset Data Type Distribution') plt.show()
代码说明
df_planet.dtypes.value_counts():自动统计每种数据类型的列数,返回一个Series,索引为数据类型,值为对应列数。type_counts.values:提取计数的数值,作为饼图各扇区的大小。type_counts.index:提取数据类型名称,作为饼图的标签。autopct='%.2f%%':设置百分比显示格式为保留两位小数,匹配需求中的66.67%和33.33%。
内容的提问来源于stack exchange,提问作者Armando Bridena
相关产品推荐
相关产品推荐

