当前位置:首页 > 杂谈 > 正文内容

数据清洗中的深坑:NULL、NaN、None和空字符,都是什么东西?-数据库中空值和null的区别

2023-07-13 10:54:13TONY杂谈84

上一篇文章,老海分享了关于Pyhon类和对象的白话理解

本篇我想分享一下 空值:None、NULL 与 空字符: “” 的区别和联系

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

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

其实,无论作为数据分析、数据科学工作者,还是日常职场人士处理数据时

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

而数据天生就是混乱的,复杂的,总是伴随着异常值和特殊值

所以出现这三个特殊值的情况,在所难免,有时甚至同时出现在同一组数据当中。

加之三者在不同环境下比如python、mysql、excel中,理解角度和设计逻辑各有不同,

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

因此对于它们,我们处理时一定要特别小心,尽量避免后续数据存储和计算出现麻烦!

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

一张图看透,None、NULL、空字符在Python、SQL、EXCEL中的整体规则

具体规则见下图:

一张图直观解释

网上关于它们的解释说法很多,说实话有些眼花缭乱了。

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

注意三点:

pandas中时间型数据的空值,显示为NaT,含义与NaN相同Exel中的空值表示,就是空,没有什么特别字符来表达NULL只出现在数据库数据中,Python中没有这个东西!

下面我们通过具体的数据案例来实验一下:

从excel、mysql数据库对比来看

我们先看一下None、NULL和空字符“”在Excel与数据库之间切换时是如何变化的

首先在excel中原始数据如下:

存储在xlsx中,excel2016版本

其中,性别字段包括了一个空字符、一个空值;年龄字段包括了一个空字符、一个空值

其次,将excel数据导入到mysql中

可以发现excel中的空值,在数据库中显示Null

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

然后,我们把从数据库导出数据到CSV中

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

加入Python、pandas后再来看一下

首先,看看Python中空值表达

None、NaN、空字符“”,它们看似都是表达空值含义,而实际上它们都有各自不同的数据类型

None是一个空值,即空对象,它Python里一个特殊的值

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

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

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

再次,Python中没有看到NULL

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

可能很多资料把NULL也写进了Python解释说明中,这个就真的有些说不过去了

如果直接将xlsx文件读取到pandas中

我们发现excel中的空值和空字符,都转为了NaN缺失值的表达!注意此时并没有出现None空值对象

如果从pandas导出到xlsx文件中

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

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

Python中的None被转为numpy中的NaN了,不再以None显示

Python中的空字符“”,转为pandas后统一显示为

将数据库中导出CSV,读取到pandas后会怎样?

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

直连数据库,读取到python后会怎样?

数据库中NULL,全部在pandas中显示为None;而空字符没有变化还是"

那pandas对数据库读取的数据有怎么样的转化规则?

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

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

而进行sum计算时,会同时排除掉NaN和None。

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

一般我们可以借助,isnull()和isna()来直接进行判断,它们会将None和NaN都识别为空值含义。

而pandas中很多函数并不支持None的运算,因为尽量将None转换为NaN。

OK,折腾了半天,实验就到这里了,总体来说,区别它们还是很费心力的,而且还有很多复杂的情况存在,以及个别特殊情况的需要处理。这里老海就不在一一展开了。

总之,在实际使用中,老海建议遵守三个法则,来保证特殊值一致性

法则1:在导取数据后,我们第一时间把空字符替换为None、NaN或者NULL

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

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

以上法则,也是根据日常处理特殊值经验而来,不一定适用于所有情况,优点是简单直接便于记忆,也可尽量避免后期出现数据转换带来的困扰。

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

“数据清洗中的深坑:NULL、NaN、None和空字符,都是什么东西?-数据库中空值和null的区别” 的相关文章

盆栽玉竹怎么养?玉竹盆栽的养殖方法和注意事项

盆栽玉竹怎么养?玉竹盆栽的养殖方法和注意事项

在养护盆栽玉竹时,最好使用疏松肥沃和排水性良好的土壤,日常养护时最好把盆栽玉竹放置在半阴的环境中,在夏天养护时还要为盆栽玉竹做好遮阳和降温通风措施,养护盆栽玉竹的过程中还要合理施加水肥。在给盆栽玉竹浇水是要保持土...

微信服务人工客服,微信24小时人工客服电话

微信服务人工客服,微信24小时人工客服电话

全国统一人工客服电话热线 : 029-87587812人工还款客服电话: 029-87587812还款客服电话: 029-87587812业务办理、app还款失败、微信第三方还款...

原创
            运作王治郅、大巴登陆NBA,著名经纪人夏松去哪了?现状如何?

原创 运作王治郅、大巴登陆NBA,著名经纪人夏松去哪了?现状如何?

原标题:运作王治郅、大巴登陆NBA,著名经纪人夏松去哪了?现状如何? 虽然自己从来没有进入过职业篮球,但是在中国篮球的发展中,曾经被誉为中国篮球第一经纪人的夏松还是居功至伟的。为什么这样说呢?从运作王治郅敲开NBA大门,成为亚洲第一个吃螃蟹的人,到把巴特尔送到NBA,让三大移动长...

2月70城房价继续上涨 上海涨幅最高

2月70城房价继续上涨 上海涨幅最高

3月15日,国家统计局发布了70个大中城市商品住宅销售价格变动情况,一二三线城市新建商品房和二手房价格同比均呈现上涨状态,且涨幅较上月有所扩大。其中,一线城市新建商品房和二手房价格领跑全国,同比分别上涨4.8%和10.8%,涨幅均比上月扩大。 从环比来看,4个一线城市和35个三线城...

促销短信里混着各式诈骗信息,节前查看手机要当心

促销短信里混着各式诈骗信息,节前查看手机要当心

告知年底有积分将过期请登录网址兑换商品,点进去一看,却是假借官方名义的高仿真网站。临近年末,不少市民发现,手机的短信收件箱中,经常有披着各式“马甲”的诈骗信息混在商家的促销消息中,令人真假难辨。反诈专家提醒市民要特别小心。9日一大早,朱女士收到一条来自“95588”的短信,提示积分已经达到10000...

“人民艺术家”秦怡近百岁仍优雅,花裙配开衫,气质不输方青卓

“人民艺术家”秦怡近百岁仍优雅,花裙配开衫,气质不输方青卓

分享最经典的时尚穿搭,让你在这个冬天美出高级感,女人从来都不缺少吸引力,只缺少激发魅力的技巧。会穿搭,让你成为有品味的优雅女人! 每一个年龄段都有专属时尚魅力,年轻人的穿着新潮、有个性,中年女性的穿着优雅、贵气,而老年人该有什么样的魅力呢? 老年人的魅力在于端庄、大方,年龄...