问题
今天看到《python数据分析与挖掘实战》这本书的第三章的第一份代码,照着书上的代码敲了一遍,发现在异常值处理的部分会报错。
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
报错信息:
TypeError: 'AxesSubplot' object is not subscriptable
解决方案
解决的方法很简单,只需在使用DataFrame创建箱线图的时候加上return_type= ‘dict’即可。
具体可见pandas的官方文档
截图如下
目前只知道这么改可以成功,具体为什么还没仔细看文档。先挖个坑,等有空把文档翻译一下。
最后附上完整代码
import pandas as pd
import matplotlib.pyplot as plt
catering_sale = '../data_learn/catering_sale.xls'
data = pd.read_excel(catering_sale, index_col='日期')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure()
p = data.boxplot(return_type='dict')
x = p['fliers'][0].get_xdata()
y = p['fliers'][0].get_ydata()
y.sort()
for i in range(len(x)):
if i > 0:
plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+0.05-0.8/(y[i]-y[i-1]), y[i]))
else:
plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i]+0.08, y[i]))
plt.show()