我有一个从pandas数据框创建的直方图,我想绘制一条表示数据集平均值的垂直虚线。我已经审核了this thread,这正是我正在寻找的风格,但是,我无法弄清楚如何使其与我的代码一起使用(下方):
import pandas as pd
import matplotlib.pyplot as plt
#import csv file into pandas dataframe
df = pd.read_csv('/path/to/my/file')
#calculating mean
m = df.mean()
#print(m)
#plotting histogram
df.plot(kind='hist')
#plt.axvline(m, color = 'r', linestyle = 'dashed', linewidth = 2)
我最终收到此错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
不确定这意味着什么,任何帮助将不胜感激。
编辑:我的数据文件是一个有一列的csv,第一行是标题(字符串),所有后续的107行都是app的值。 1.0E + 11到4.0E + 11
虚假数据(Python 2.7)
import io
import numpy as np
a = np.linspace(1, 4, num = 20)
s = 'E11\n'.join(map(str, a))
s += 'E11'
#print(s)
df = pd.read_csv(io.BytesIO(s))
答案 0 :(得分:0)
m
是一个Pandas系列,它有一个索引和一个值--Matplotlib一定不知道如何处理它。
>>> print m
1.0E11 2.578947e+11
dtype: float64
>>> type(m)
<class 'pandas.core.series.Series'>
>>>
均值的值为m[0]
或m.values
,因此:
plt.axvline(m[0], color = 'r', linestyle = 'dashed', linewidth = 2)
#or
plt.axvline(m.values, color = 'r', linestyle = 'dashed', linewidth = 4)
答案 1 :(得分:-1)
我认为你应该使用m.all()而不是m。并且他们使用plt.show()来绘制直方图。所以代码看起来像这样:
#plotting histogram
# df.plot(kind='hist')
plt.axvline(m.all(), color = 'r', linestyle = 'dashed', linewidth = 2)
plt.show()