2016-10-07 10 views
0

私は2つのパンダシリーズ間の相関関係を計算しようとしています。これは私がnumpyのか、scipyのダウンロードから取得されるものです:なぜ、pandas.Series.corrはNanを返しますが、numpyやscipyは数値を計算しますか?

scipy.stats.pearsonr(xfarines["400"].values, yfarines["PROTREF"].values) 


(0.71564870605278108, 2.9185934338775347e-23) 


pd.np.corrcoef(xfarines["400"].values, yfarines["PROTREF"].values) 


array([[ 1.  , 0.71564871], 
    [ 0.71564871, 1.  ]]) 

しかし、これは私に与えるものパンダです:

この質問を見てみると
s = xfarines["400"] 
s.corr(yfarines["PROTREF"]) 


nan 

pandas df.corr() returns NaN despite data fed having populated data dtypesはOKであり、それはそうならば、私はチェックそれは:

s.describe() 

count 140.000000 
mean  0.304078 
std  0.057225 
min  0.197300 
25%  0.250300 
50%  0.318500 
75%  0.346850 
max  0.408600 
Name: 400, dtype: float64 


yfarines["PROTREF"].describe() 

count 140.000000 
mean  12.619143 
std  2.547644 
min  7.600000 
25%  10.975000 
50%  12.100000 
75%  14.590000 
max  18.200000 
Name: PROTREF, dtype: float64 

したがって、どこから問題が発生するのかわかりません。

+0

データフレームのインデックスは何ですか?彼らは整列していますか? – JMat

+0

私はインデックスをよく見ています。彼らは文字列です。実際には、「yfarines」では最後に空白がいくつかありました。この空白を消去することで、 's.corr'はnumpyやscipyと同じ値を返します! csvを読むときにこの空白をきれいにする方法はありますか? – Ger

+0

[この回答](http://stackoverflow.com/a/13386025/6904813)はこれを正確に行います – JMat

答えて

0

あなたはnumpy(v 1.8.0)と言われていますが、scipyのインポートは異なるかもしれません。これはnumpyのは

>>> a 
array([[ 3.00000000, 0.17157288], 
     [ 3.00000000, 1.58578644], 
     [ 3.00000000, 3.00000000], 
     [ 3.00000000, 4.41421356], 
     [ 3.00000000, 5.82842712]]) 
>>> np.corrcoef(a[:,0], a[:,1],rowvar=0, bias=0, ddof=None) 
array([[ nan, nan], 
     [ nan, 1.00000000]] 

おそらく、新しいバージョンを持つ人々は、それが返すものを確認することができますが、少なくとも与えられているものである縦線のポイントのために何をするかです。 水平線のポイントについて

>>> b = np.array([a[:,1],a[:,0]]).T 
>>> b 
array([[ 0.17157288, 3.00000000], 
     [ 1.58578644, 3.00000000], 
     [ 3.00000000, 3.00000000], 
     [ 4.41421356, 3.00000000], 
     [ 5.82842712, 3.00000000]]) 
>>> np.corrcoef(b[:,0], b[:,1],rowvar=0, bias=0, ddof=None) 
array([[ 1.00000000, nan], 
     [ nan, nan]]) 
関連する問題