易商讯
当前位置: 首页 » 资讯 » 科普 » 正文

Pyhon类和对象的白话理解

放大字体  缩小字体 发布日期:2023-01-24 12:26:04
导读

在最后一篇文章中,老海分享了对Pyhon类和对象的白话理解我想分享这篇文章 空值:None、NULL 与 空字符: “” 区别与联系具体的实验环境是Python3.7、mysql8.0、Excel2016为什么需要弄清楚?None、NULL和空字符“”?事实上,无论是作为数据分析、数据科学工作者,还是日常工作人员处理数据我们经常需要数据Python、SQL数

在最后一篇文章中,老海分享了对Pyhon类和对象的白话理解

我想分享这篇文章 空值:None、NULL 与 空字符: “” 区别与联系

具体的实验环境是Python3.7、mysql8.0、Excel2016

数据结构中null怎么定义(数据清洗中的深坑)(1)

为什么需要弄清楚?None、NULL和空字符“”?

事实上,无论是作为数据分析、数据科学工作者,还是日常工作人员处理数据

我们经常需要数据Python、SQL数据库、CSV/EXCEL在文件之间来回导出导入

数据自然是混乱和复杂的,总是伴随着异常值和特殊值

因此,这三个特殊值的出现是不可避免的,有时甚至同时出现在同一组数据中。

数据结构中null怎么定义(数据清洗中的深坑)(2)

加上三者在不同的环境中,例如python、mysql、excel理解角度和设计逻辑各不相同,

在数据处理中,这些数据往往会导致前后不一致,各种奇怪BUG报错发生。

所以我们在处理的时候一定要特别小心,尽量避免后续数据存储和计算的麻烦!

以下老海从三个角度来解释:

看透一张图片,None、NULL、空字符在Python、SQL、EXCEL总体规则

具体规则见下图:

数据结构中null怎么定义(数据清洗中的深坑)(3)

直观解释一张图片

网上有很多关于他们的解释,说实话有点眼花缭乱。

我自己整理了一个简化的表格,看起来直观多了。

注意三点:

pandas中时间数据的空值显示为NaT,意思和NaN一样Exel中间的空值表示空,没有特殊字符表示NULL只出现在数据库数据中,Python没有这样的东西!

让我们通过具体的数据案例进行实验:

从excel、mysql对比数据库

让我们先看看None、NULL在Excel和数据库之间切换和空字符是如何变化的

excel中的原始数据如下:

数据结构中null怎么定义(数据清洗中的深坑)(4)

存储在xlsx中,excel2016版本

数据结构中null怎么定义(数据清洗中的深坑)(5)

其中,性别字段包括空字符和空值;年龄字段包括空字符和空值

其次,将excel数据导入mysql

数据结构中null怎么定义(数据清洗中的深坑)(6)

excel中的空值可以在数据库中找到Null

数据结构中null怎么定义(数据清洗中的深坑)(7)

空字符显示为空白,空数值显示为0(与数据库设置有关)

然后我们将数据从数据库导出到CSV

数据结构中null怎么定义(数据清洗中的深坑)(8)

从数据库到CSV,我们可以发现,NULL显示为空,其他没有变化

加入Python、pandas再来看看

首先,看看Python的中空值表达

数据结构中null怎么定义(数据清洗中的深坑)(9)

None、NaN、空字符“”,它们似乎表达了空值的含义,但实际上它们都有自己不同的数据类型

None它是一个空值,即空对象,在Python中具有特殊值

None不能理解为0,因为0是有意义的;而None是一个特殊的空值,None不是空字符串。

而NaN,pandas和numpy属于浮点数据的专属类型,代表缺失值

而“”,是空字符的表现。

再次,Python中没有看到NULL

数据结构中null怎么定义(数据清洗中的深坑)(10)

事实是,null 和 NULL 表示数据库中的空值, python他们的对象不存在!

也许很多信息也把NULL写进了Python的解释中,这真的有点过去了

将xlsx文件直接读取到pandas中

数据结构中null怎么定义(数据清洗中的深坑)(11)

我们发现excel中的空值和空字符都变成了Nan缺失值的表达!请注意,此时没有None空值对象

如果从pandas导出到xlsx文件

数据结构中null怎么定义(数据清洗中的深坑)(12)

数据结构中null怎么定义(数据清洗中的深坑)(13)

我们可以看到pandas中的pandasNaN,在excel中显示为空,没有任何内容。

Python中的数据转换为pandas会发生什么?

数据结构中null怎么定义(数据清洗中的深坑)(14)

PythonNone在Numpy中被转换为Nan,None不再显示

数据结构中null怎么定义(数据清洗中的深坑)(15)

Python将空字符“”转换为pandas后统一显示为 ''

导出数据库CSV,读完pandas后会发生什么?

数据结构中null怎么定义(数据清洗中的深坑)(16)

数据库中的空值和空字符均显示为NaN

读取python后,直接连接数据库会发生什么?

数据结构中null怎么定义(数据清洗中的深坑)(17)

数据库中NULL,所有在pandas中显示的都是None;空字符没有改变还是空字符没有改变"

Pandas对数据库读取的数据有什么转换规则?

数据结构中null怎么定义(数据清洗中的深坑)(18)

pandas数据库中数值字段中的数据库None转为NaN,但是,其他类型的字段将被保留None

同时,pandas在count计算中不计算None和NaN,但是计算空字符"

在计算sum时,Nan和Nan和None。

pandas如何判断空值类型,如何转换None和NaN呢?

数据结构中null怎么定义(数据清洗中的深坑)(19)

一般我们可以借助,isnull()和isna()直接判断,他们将与None和NaN它们都被识别为空值的含义。

数据结构中null怎么定义(数据清洗中的深坑)(20)

但是pandas中的许多函数并不支持None的运算,因为尽量将None转换为NoneNaN。

OK,经过长时间的辗转反侧,实验到此为止。一般来说,区分它们仍然需要付出巨大的努力,有许多复杂的情况和需要处理的一些特殊情况。老海不会在这里一一展开。

总之,在实际使用中,老海建议遵守三条规则,以确保特殊值的一致性

数据结构中null怎么定义(数据清洗中的深坑)(21)

规则1:导取数据后,我们第一次用空字符替换空字符None、NaN或者NULL

规则2:使用pandas或numpy时,我们将None统一替换为NaN

规则3:当数据导入数据库时,我们将NaN统一替换为None

上述规则也是基于日常处理特殊值的经验,不一定适用于所有情况。其优点是简单、直接、易于记忆,也可以尽量避免后期数据转换带来的麻烦。

OK,今天就到这里。如果你喜欢老海的分享,请注意留言和转发。我是数据炼金师,老海

声明:易商讯尊重创作版权。本文信息搜集、整理自互联网,若有来源标记错误或侵犯您的合法权益,请联系我们。我们将及时纠正并删除相关讯息,非常感谢!

 
(文/小编)
免责声明
• 
本文Pyhon类和对象的白话理解链接:http://www.esxun.cn/news/93755.html 。本文仅代表作者个人观点,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们,我们将在24小时内处理完毕。如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
 

Copyright © www.esxun.cn 易商讯ALL Right Reserved


冀ICP备2023038169号-3