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+ bytesdata.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 bytesdata.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  8data.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 otherwisereturn c / cstddev = sqrt(d.real)c /= stddev[:, None]c /= stddev[None, :]

下面是计算 Pearson相关系数的公式:

我们可以看到如果其中一个维度的标准差为0,都会导致nan的输出。当一个维度的数据全为一个值时,标准差就等于0。所以并不是我之前所说的是因为值全为0不准确,而是因为标准差为0. 谢谢下面的评论指出了偶的错误。

【题外话】

俗话说,技多不压身。今天给大家推荐一个PS课程

现在的PS,已经成为了仅次于office办公软件技能下,求职着需要掌握的技能,而不再是设计师的专属。

无论是海报、课程设计、亦或着公众号排版、产品详情页、企业团队宣传招,都需要用到PS。

对于大学生和职场新人来说,多掌握一项技能,你对公司的价值就越大,职场竞争力就更强,也就更容易拿到更高的薪水。

DataFrame计算corr()函数计算相关系数时,出现返回值为空或NaN的情况相关推荐

  1. 调用个别f5 负载端口为80的vs时,返回值为空的问题

    现状: vs负载端口为80并添加XFF,pool包含2个member,member的monitor端口为80&9000. 故障现象: 应用同事描述说再完全复制了一个member并添加到pool ...

  2. pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性

    pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations).例如,计算两种商品销售额之间的3个月的滚动相关性 目录

  3. 基于Apache math3 的遗传算法计算复杂函数在定义域内的最值

    遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最优化的搜索算法,是进化算法的一种.进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传.突变. ...

  4. 【函数的定义、调用(嵌套调用、递归调用)、声明、函数的分类(有无返回值、有无参数)、变量(自动变量与静态变量、局部变量与全局变量、只读变量)】(学习笔记7--函数)

    第一篇博文,打卡新星计划第三季3.4~4.4,希望能有质的飞跃,顶峰相见 一.自定义函数 1.函数的定义 函数在使用前也需要定义,定义的格式如下: 数据类型 函数名([数据类型 参数1],[数据类型 ...

  5. 函数中有多个return?C语言中,一个函数可以有几个返回值?

    在移植wifi的代码时,遇到了一些与下面类似的函数,这些函数中有不只一个return,这可是个新鲜的玩意儿: int func (int b) {int a=5;if (a>b)return a ...

  6. 以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值。

    以下是一个使用 VBA 的例子,演示了 ByVal 和 ByRef 的区别,以及如何在函数中传递参数和返回值: Sub Example()Dim x As Integer, y As Integerx ...

  7. Go 学习笔记(61)— Go 高阶函数、函数作为一等公民(函数作为输入参数、返回值、变量)的写法

    函数在 Go 语言中属于"一等公民(First-Class Citizen)"拥有"一等公民"待遇的语法元素可以如下使用 可以存储在变量中: 可以作为参数传递给 ...

  8. 解决LoadImage函数返回值为空的问题

    在picture control控件显示本地bmp图片的方法里,使用LoadImage加载bmp图片时,返回值经常为空,解决方法: 1.把bmp图片用画图工具打开,再以bmp格式另存为 2.上述方法行 ...

  9. smali语言详解之一般/构造方法(函数)的声明与返回值关键字

    smali语言详解之一般/构造方法(函数)的声明与返回值关键字 一. smali语言的方法声明格式 .method与.end method成对出现,类似于java中的花括号 1.1.非静态的一般方法 ...

最新文章

  1. 西班牙放大招,利用区块链技术防腐
  2. python语言培训班-学python培训班需要多久?深圳Python培训
  3. SAP Fiori里的manifest.json
  4. java----连接池C3p0使用的补充
  5. WordPress 主题教程 #5c:日志元数据
  6. Java 多态的实现机制
  7. python实现冒泡排序视频_Python实现冒泡排序
  8. C盘pagefile.sys不可删除,解决磁盘占用太满的问题
  9. 原来我不懂printf
  10. windows--CMD--命令大全
  11. MATLAB自动设置仿真曲线颜色和线型属性
  12. 最全常见算法工程师面试题目整理
  13. 世界上最好的惯性动作捕捉设备Xsens,你不应该错过的Xsens MVN Animate Pro
  14. 【Keras】Keras中fit_generator的使用,及fit、fit_generator、和train_on_batch的区别
  15. PW系列 | palette 体验
  16. 【Win 10 应用开发】MIDI 音乐合成——乐理篇
  17. 金秋杭州游 只为桂花香
  18. 【秋招面试】货拉拉面试(1面过程)
  19. ArcGIS三维资源收集帖
  20. Python爬虫爬取微博评论案例详解

热门文章

  1. 个人永久性免费-Excel催化剂功能第87波-将批量发送邮件做到极致化,需借力Outlook...
  2. 张飞老师硬件第十六部视频整理——硬件基础2
  3. 农家女靠养花赚钱,年收入几十万
  4. 一、如何快速掌握数据库
  5. 104、二氧化碳气体灭火系统的灭火机理
  6. 荣耀平板5鸿蒙降级安卓并刷入原生Android12系统——麒麟659,4+64G,10英寸wifi版本
  7. java三元表达式嵌套_三元运算符的嵌套详解:分别在JSTL、JavaScript和Java中
  8. Charles抓包工具安装教程
  9. Mysql 查询锁表指令速查
  10. python如何写生日快乐说说_一句祝自己生日快乐的说说