2017-05-26 63 views
1

所以我設置了這個空的數據框DF,並根據一些條件將數據加載到數據框中。因此,其一些元素將是空的(nan)。我注意到如果我在創建空數據框時沒有將數據類型指定爲float,DF.boxplot()會給我一個'索引超出範圍'的錯誤。Matplotlib Boxplot和熊貓數據幀數據類型

據我瞭解,熊貓的DF.boxplot()使用matplotlib的plt.boxplot()函數,所以自然我嘗試使用plt.boxplot(DF.iloc [:,0])來繪製第一列的盒圖。我注意到了一個反轉的行爲:當DF的dtype是浮動的時候,它不起作用:它只會向我顯示一個空的圖。見下面其中DF.boxplot()不會工作的代碼,但plt.boxplot(DF.iloc[:,0])將繪製的箱線圖(當我加D型=「浮動」首先創建數據幀時,plt.boxplot(DF.iloc[:,0])會給我一個空的情節):

import numpy as np 
import pandas as pd 

DF=pd.DataFrame(index=range(10),columns=range(4)) 
for i in range(10): 
    for j in range(4): 
     if i==j: 
     continue 
     DF.iloc[i,j]=i 

我想知道做這與plt.boxplot()如何處理不同數據類型的nan有關?如果是這樣,爲什麼設置數據框的數據類型爲'object'不適用於DF.boxplot(),如果pandas只是使用matplotlib的boxplot函數?

+0

增加了一些代碼的重現我的問題 – lizardfireman

回答

2

我認爲我們可以同意df.boxplot()plt.boxplot都不能處理「對象」類型的數據幀。相反,他們需要是一個數字數據類型。

如果數據是數字,df.boxplot()將按預期工作,即使使用nan值也是如此,因爲它們在繪圖之前被刪除。

import pandas as pd 
import matplotlib.pyplot as plt 

df=pd.DataFrame(index=range(10),columns=range(4), dtype=float) 
for i in range(10): 
    for j in range(4): 
     if i!=j: 
      df.iloc[i,j]=i 

df.boxplot() 
plt.show() 

使用plt.boxplot您需要手動刪除nan S,例如使用df.dropna()

import pandas as pd 
import matplotlib.pyplot as plt 

df=pd.DataFrame(index=range(10),columns=range(4), dtype=float) 
for i in range(10): 
    for j in range(4): 
     if i!=j: 
      df.iloc[i,j]=i 
data = [df[i].dropna() for i in range(4)] 
plt.boxplot(data) 
plt.show() 

總結:enter image description here

+0

謝謝,我才意識到,即使'plt.boxplot()'會給我'D型='情節object'',它仍然會返回一個錯誤。 – lizardfireman