DataFrame计算corr()函数计算相关系数时,出现返回值为空或NaN的情况
1. 返回值为空的情况出现返回值为空的情况是因为数据的类型不是数值型。用data.info()函数可以查看dataframe的信息。这里举个例子:###创建一个dataframe,数据类型为objectdata = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c'],dtype=object)dataOut[23]:...
1. 返回值为空的情况
出现返回值为空的情况是因为数据的类型不是数值型。用data.info()函数可以查看dataframe的信息。这里举个例子:
###创建一个dataframe,数据类型为object
data = pd.DataFrame([[1,2,3],[4,5,6]],columns=['a','b','c'],dtype=object)
data
Out[23]:
a b c
0 1 2 3
1 4 5 6
可以看到data的数据类型为object,使用data.corr()计算相关系数返回的值为空。
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
a 2 non-null object
b 2 non-null object
c 2 non-null object
dtypes: object(3)
memory usage: 128.0+ bytes
data.corr()
Out[25]:
Empty DataFrame
Columns: []
Index: []
用data.apply(lambda x:x.astype(float))将数据的类型改为数值型, 记得要把结果赋值给一个新的变量,否则不会改变数据的类型。然后返回值就不为空了。
data = data.apply(lambda x:x.astype(float))
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
a 2 non-null float64
b 2 non-null float64
c 2 non-null float64
dtypes: float64(3)
memory usage: 128.0 bytes
data.corr()
Out[39]:
a b c
a 1.0 1.0 1.0
b 1.0 1.0 1.0
c 1.0 1.0 1.0
2. 返回值为NaN的情况
出现返回值存在NaN的一种情况是因为dataframe里面存在一列的值全为一样的,我们再来举一个?,特征a的值全为0:
data = pd.DataFrame([[0,2,9],[0,6,8]],columns=['a','b','c'])
data
Out[44]:
a b c
0 0 2 9
1 0 6 8
data.corr()
Out[45]:
a b c
a NaN NaN NaN
b NaN 1.0 -1.0
c NaN -1.0 1.0
这个是因为corr()函数调用了get_corr_func(),然后get_corr_func()调用了scipy/stats/spearmanr(),
然后spearmanr()调用了numpy/corrcoef (), 在这个函数里面有一段代码,让输出的结果为NaN。下面这段代码计算了Pearson相关系数,c为协方差矩阵,协方差矩阵的主对角线就是各个维度的方差。
c = cov(x, y, rowvar)
try:
d = diag(c)
except ValueError:
# scalar covariance
# nan if incorrect value (nan, inf, 0), 1 otherwise
return c / c
stddev = sqrt(d.real)
c /= stddev[:, None]
c /= stddev[None, :]
下面是计算 Pearson相关系数的公式:

我们可以看到如果其中一个维度的标准差为0,都会导致nan的输出。当一个维度的数据全为一个值时,标准差就等于0。所以并不是我之前所说的是因为值全为0不准确,而是因为标准差为0. 谢谢下面的评论指出了偶的错误。
【题外话】
俗话说,技多不压身。今天给大家推荐一个PS课程
现在的PS,已经成为了仅次于office办公软件技能下,求职着需要掌握的技能,而不再是设计师的专属。
无论是海报、课程设计、亦或着公众号排版、产品详情页、企业团队宣传招,都需要用到PS。
对于大学生和职场新人来说,多掌握一项技能,你对公司的价值就越大,职场竞争力就更强,也就更容易拿到更高的薪水。

更多推荐



所有评论(0)