2017-05-26 18 views
1

この空のデータフレームDFを設定し、いくつかの条件に従ってデータフレームにデータをロードします。したがって、その一部の要素は空になります(nan)。空のデータフレームを作成するときに浮動小数点型としてデータ型を指定しないと、DF.boxplot()は「範囲外のインデックス」エラーを表示することに気付きました。最初の列のボックスプロットをプロットする:Matplotlib Boxplotとpandasデータフレームのデータ型

私はそれを理解するように、パンダDF.boxplot()ので当然、私はplt.boxplot([0] DF.iloc)を使用して試み、matplotlibのplt.boxplot()の関数を使用します。私は逆の振る舞いに気付きました:DFのdtypeが浮動小数点の場合、それは動作しません:空のプロットが表示されます。

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 

私が行う疑問に思って:(私はDTYPE = 'フロート初のデータフレームを作成するときに、plt.boxplot(DF.iloc[:,0])は私の空のプロットを与えるを追加するとき)DF.boxplot()文句を言わない作業以下のコードを参照してください、しかしplt.boxplot(DF.iloc[:,0])は箱ひげ図をプロットしますこれは、plt.boxplot()が異なるデータ型に対してどのように処理するのかと関係していますか?もしそうなら、なぜpandasがmatplotlibのboxplot関数を使用しているのであれば、dataframeのデータ型を 'object'として設定したのはDF.boxplot()では機能しませんでしたか?

+0

が – lizardfireman

答えて

2

df.boxplot()でもplt.boxplotも ​​"オブジェクト"タイプのデータフレームを処理できないと私は思う。代わりに、数値データ型である必要があります。

データが数値の場合、df.boxplot()は、プロットする前に削除されているため、nanの値でも正常に動作します。

あなたは、例えば、手動 nan Sを削除する必要があります plt.boxplotを使用して
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() 

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は()'私 'DTYPE = 'object''とのプロットを与えるにもかかわらず、実現しますそれでもエラーは返されます。 – lizardfireman

関連する問題