2

pandas dataframeは列を持つ を持っています:

クリック値の「動画」と「リンク」

日時のインデックス付き。何らかの理由で、ビデオ シリーズで semilogy と boxplot を使用すると、エラーが発生します。

ValueError: Data has no positive values, and therefore can not be log-scaled.

しかし、「リンク」シリーズでそれを行うと、箱ひげ図を正しく描くことができます。

「ビデオ」シリーズと「リンク」シリーズの両方に NaN 値と正の値があることを確認しました。

なぜこれが起こっているのかについて何か考えはありますか? 以下は、これが事実であることを確認するために私が行ったことです

以下はサンプルコードです。

#get all the not null values of video to show that there are positive
temp=a.types_pivot[a.types_pivot['video'].notnull()]
print temp

#get a count of all the NaN values to show both 'video' and 'link' has NaN
count = 0 
for item in a.types_pivot['video']:
    if(item.is_integer() == False):
        count += 1

#try to draw the plots
print "there is %s nan values in video" % (count)

fig=plt.figure(figsize=(6,6),dpi=50)
ax=fig.add_subplot(111)
ax.semilogy()
plt.boxplot(a.types_pivot['video'].values)

ビデオシリーズのコードからの関連出力は次のとおりです

    タイプ リンク ビデオ
    created_time
2011-02-10 15:00:51+00:00 ナン 5 2011-02-17 17:50:38+00:00 ナン 5 2011-03-22 14:04:56+00:00 ナン 5

ビデオには 5463 個の nan 値があります

私が行うことを除いて、まったく同じコードを実行します

a.types_pivot['link'] 

ボックスプロットを描くことができます。

以下は、リンクシリーズからの関連する出力です

インデックス: 5269 エントリ、2011-01-24 20:03:58+00:00 から 2012-06-22 16:56:30+00:00
データ列:
リンク 5269 null 以外の値
写真 0 非 null 値
質問 0 非 null 値
status 0 null 以外の値
swf 0 非ヌル値
ビデオ 0 の非 null 値
dtypes: float64(6)

リンクには216個のnan値があります

Using the describe function

a.types_pivot['video'].describe()

<pre>
count    22.000000
mean     16.227273
std      15.275040
min       1.000000
25%       5.250000
50%       9.500000
75%      23.000000
max      58.000000
</pre>
4

1 に答える 1

1

注: imgur の問題により、画像をアップロードできません。後でもう一度試します。

pd.DataFrame.boxplot() を呼び出して、パンダの matplotlib ヘルパー / ラッパーを利用します。これで NaN 値が処理されると思います。また、データを簡単に比較できるように、両方のシリーズを同じプロットに配置します。

いくつかの NaN 値と負の値を持つデータフレームを作成する

In [7]: df = pd.DataFrame(np.random.rand(10, 5))    
In [8]: df.ix[2:4,3] = np.nan
In [9]: df.ix[2:3,4] = -0.45
In [10]: df
Out[10]: 
          0         1         2         3         4
0  0.391882  0.776331  0.875009  0.350585  0.154517
1  0.772635  0.657556  0.745614  0.725191  0.483967
2  0.057269  0.417439  0.861274       NaN -0.450000
3  0.997749  0.736229  0.084077       NaN -0.450000
4  0.886303  0.596473  0.943397       NaN  0.816650
5  0.018724  0.459743  0.472822  0.598056  0.273341
6  0.894243  0.097513  0.691781  0.802758  0.785258
7  0.222901  0.292646  0.558909  0.220400  0.622068
8  0.458428  0.039280  0.670378  0.457238  0.912308
9  0.516554  0.445004  0.356060  0.861035  0.433503

次のように NaN 値の数を数えることができることに注意してください。

In [14]: df[3].isnull().sum()   # Count NaNs in the 4th column
Out[14]: 3

ボックス プロットは次のとおりです。

In [16]: df.boxplot()

たとえば、次のようにして片対数箱ひげ図を作成できます。

In [23]: np.log(df).boxplot()

または、より一般的には、心ゆくまで変更/変換してから、箱ひげ図を作成します。

In [24]: df_mod = np.log(df).dropna()    
In [25]: df_mod.boxplot()
于 2012-10-31T01:44:35.737 に答える