2014-04-17 79 views
6

列的我已經在Python以下數據框(實際數據幀是更大的,只是呈現出小樣本):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。

當我嘗試從此熊貓數據框中創建箱圖時,從每列中選取的值的數量限制爲列中最少的值(在本例中爲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() 
+0

你應該張貼的numpy的/大熊貓代碼 – mrKelley

+0

添加的代碼。好吧,我看到發生了什麼。我使用df.dropna刪除每列中缺少值的行。但是,這會將數據框重新調整爲列長度的最小公分母,並搞亂了繪圖。任何解決方案 – user308827

+1

如何不放棄NaN?我認爲'boxplot'會自己處理NaN值。 – HYRY

回答

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 

enter image description here

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

+0

謝謝,我會試試這個。什麼是 - =你有一些代碼之前? – user308827

+0

這可以抑制終端中的無用輸出。你看,'plt.boxplot'將返回3個項目的列表。 'plt.xticks'將返回一堆ticks對象。 –

+0

優秀,這個作品,謝謝! – user308827