Python boxplot不同长度的列

时间:2014-04-17 21:50:43

标签: python pandas boxplot prettyplotlib

我在Python中有以下数据框(实际的数据框要大得多,只是展示一小部分样本):

      A     B     C     D     E     F
0  0.43  0.52  0.96  1.17  1.17  2.85
1  0.43  0.52  1.17  2.72  2.75  2.94
2  0.43  0.53  1.48  2.85  2.83  
3  0.47  0.59  1.58        3.14  
4  0.49  0.80        

我使用df.values将数据帧转换为numpy,然后将其传递给boxplot。

当我尝试从这个pandas数据帧中创建一个boxplot时,从每列中选取的值的数量被限制为列中的最小值(在本例中为F列)。有什么办法可以从每一列中对每个值进行箱形图绘制吗?

注意:我使用df.dropna删除每列缺少值的行。但是,这会将数据帧的大小调整为列长度的最小公分母,并搞乱绘图。

import prettyplotlib as ppl
import numpy as np
import pandas
import matplotlib as mpl
from matplotlib import pyplot

df = pandas.DataFrame.from_csv(csv_data,index_col=False)
df = df.dropna()
labels = ['A', 'B', 'C', 'D', 'E', 'F']
fig, ax = pyplot.subplots()
ppl.boxplot(ax, df.values, xticklabels=labels)
pyplot.show()

1 个答案:

答案 0 :(得分:6)

正确的方法是使用.boxplot()中的pandas nan来正确处理In [31]: print df A B C D E F 0 0.43 0.52 0.96 1.17 1.17 2.85 1 0.43 0.52 1.17 2.72 2.75 2.94 2 0.43 0.53 1.48 2.85 2.83 NaN 3 0.47 0.59 1.58 NaN 3.14 NaN 4 0.49 0.80 NaN NaN NaN NaN [5 rows x 6 columns] In [32]: _=plt.boxplot(df.values) _=plt.xticks(range(1,7),labels) plt.savefig('1.png') #keeping the nan's and plot by plt

In [33]:

_=df.boxplot()
plt.savefig('2.png') #keeping the nan's and plot by pandas

enter image description here

In [34]:

_=plt.boxplot(df.dropna().values)
_=plt.xticks(range(1,7),labels)
plt.savefig('3.png') #dropping the nan's and plot by plt

enter image description here

{{1}}

enter image description here