Python中遍历Series计算百分比并绘制柱状图的实现问题
解决方案
方法1:使用pandas向量化运算(推荐)
pandas支持直接对整个Series做批量运算,不需要写循环,代码更简洁效率也更高:
import pandas as pd data = pd.array([ 6.95, 84.38, 11.82, 2.47, 1.12]) ser = pd.Series(data, index = ['wine', 'beer', 'vodka', 'champagne', 'brandy']) # 直接计算占总和的百分比,保留2位小数 pct_ser = (ser / ser.sum() * 100).round(2) # 绘制百分比柱状图 pct_ser.plot(kind='bar')
输出的pct_ser就是带原有索引的Series类型,可直接调用绘图方法。
方法2:按原有循环逻辑修改
如果一定要用循环实现,需要先把每次循环计算的百分比值存入列表,循环结束后再统一转为Series,保留原始索引:
pct_list = [] sum_val = ser.sum() for i in ser.values: pct = i / sum_val * 100 pct_list.append(pct.round(2)) # 把百分比列表转为带原始索引的Series pct_ser = pd.Series(pct_list, index=ser.index) pct_ser.plot(kind='bar')
原来的代码报错是因为每次循环得到的pct都是单个浮点数,没有把所有结果聚合为序列类型,自然无法调用plot方法。
内容的提问来源于stack exchange,提问作者Bluetail
相关产品推荐
相关产品推荐

