无是什么意思(数据清理中的深坑)
admin
2023-08-26 21:25:34

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

在这篇文章中,我想分享空值之间的区别和联系:无,空值和空字符:& quot"

具体实验环境为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和空字符& quot"在Excel和数据库之间切换时更改。

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

存储在xlsx中,excel2016版本

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

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

您可以在excel中查找空值,并在数据库中显示Null。

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

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

我们可以发现,从数据库到CSV,NULL是空的,其他的都没变。

加入Python、pandas后再来看一下

首先,看看Python中空值表达

无,NaN,空字符& quot"看起来都是表达空的意思,但实际上都是数据类型不同。

None是空值,即空对象,这是Python中的一个特殊值。

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

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

和& quot"是空字符的表示。

再次,Python中没有看到NULL

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

可能很多资料都把NULL写进Python解释里了,真的没有意义。

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

我们发现excel中的空值和空字符被转化为NaN的缺失值的表达式!None表示此时没有空对象。

如果从pandas导出到xlsx文件中

我们可以看到熊猫中的NaN在excel中是空的,没有内容。

010到1010 Python中的None在numpy中改为NaN,不再显示为None。

空字符& quot"在Python中显示为& quot"被改造成熊猫后。

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

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

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

数据库中为空,全部显示为无;在熊猫中;空字符没有改变或者

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

熊猫

会将数据库中数值型字段中的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,今天就到这里。喜欢老海的分享,请关注留言和转发,我是数据炼金师,老海

相关内容

热门资讯

金花创建房间/微信金花房卡怎么... 1.微信渠道:(荣耀联盟)大厅介绍:咨询房/卡添加微信:88355042 2.微信游戏中心:打开微...
金花房间卡/金花房卡如何购买/... 金花房间卡/金花房卡如何购买/新超圣金花房卡正版如何购买新超圣是一款非常受欢迎的游戏,咨询房/卡添加...
牛牛创建房间/金花房卡批发/神... 微信游戏中心:神牛大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...
链接牛牛/牛牛房卡游戏代理/鸿... 鸿运大厅房卡更多详情添加微:33549083、 2、在商城页面中选择房卡选项。 3、根...
科技实测!牛牛房卡怎么获得/乐... 微信游戏中心:乐酷大厅房卡在哪里买打开微信,添加客服【88355042】,进入游戏中心或相关小程序,...