我尝试计算两个熊猫系列之间的相关性。这是我从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是否正常,它似乎是:
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 :(得分: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]])