本文旨在阐述 空值:None、NULL 以及 空字符串: “” 之间的异同点,并探讨它们彼此间的关联性。
具体的实验环境为.7、.0、

为什么需要搞清楚None、NULL和空字符“”?
实际上,不论从事数据分析或数据科学相关岗位,抑或是普通办公人员运用数据资料
我们时常要实现数据在、SQL数据库、CSV或EXCEL文件间的转换迁移
而数据天生就是混乱的,复杂的,总是伴随着异常值和特殊值。
因此,这三个特殊值的出现,是无法避免的,偶尔还会在同一批数据里集中发生。

此外,这三个事物在诸如MySQL、Excel等不同应用场景下,其认知视角和构建方式也互有差异,各有千秋
常常导致这些信息,在信息处理时出现前后矛盾的情况,并且引发各种异常错误问题。
所以针对这些,操作时必须格外谨慎,力求防止将来数据保存和运算产生问题!
下面老海从三个角度来解释一下:
通过一张图可以完全理解,None、NULL、空字符串在SQL和EXCEL中的全部规范
具体规则见下图:

一张图直观解释
网上关于它们的解释说法很多,说实话有些眼花缭乱了。
我自己整理一个简化的表格,这样看起来直观多了。
注意三点:
下面我们通过具体的数据案例来实验一下:
从excel、mysql数据库对比来看
先来观察一下None、NULL以及空白字符串在从Excel转换到数据库的过程中会出现什么情况,再看看它转换回Excel时又会变成什么样子
首先在excel中原始数据如下:

存储在xlsx中,版本

性别信息里面,存在一个空白文本和一个缺失数据;年龄数据里面,也存在一个空白文本和一个缺失数据
其次,将excel数据导入到mysql中

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

而空字符显示为空白,空数值显示为0(与数据库设置有关)
然后,我们把从数据库导出数据到CSV中

数据库里的空值在转换成CSV文件后,会变成空白,而其他数据保持原样
加入、后再来看一下
首先,看看中空值表达

空值有多种形式,比如None、NaN和空白字符串,它们在外观上看似相同,但本质上各自属于不同的数据类型
None是一个空值,即空对象,它里一个特殊的值
零不等于空值,零代表有具体数值;空值是特殊标记,空值不同于空白文本。
NaN,是numpy特有的数据类型,属于浮点数类别,用于标示数据中的缺失情况
而“”,是空字符的表示。
再次,中没有看到NULL

实际情况是,null 与 NULL 在数据库中均代表空值,它们并非真实存在的对象。
或许不少文献将空值纳入阐述范围,这种做法实在难以自圆其说
如果直接将xlsx文件读取到中

我们注意到表格里的空白项和空白文本,都转换成了NaN的缺失数据形式!需要留意的是,此刻并没有显现出None的空对象
如果从导出到xlsx文件中


能看出来里面存在NaN,在Excel里呈现为空白,没有任何信息。
那中数据转为会发生什么?

中的空值转换成了数组里的缺失数据,不再以空值形式呈现

中的空字符“”,转为后统一显示为 ''
将数据库中导出CSV,读取到后会怎样?

数据库中的空值和空字符,均显示为NaN
直连数据库,读取到后会怎样?

数据库里的空值,在界面全部呈现为空;而空白文本,形态未变仍是空引号
那对数据库读取的数据有怎么样的转化规则?

转换数据表里数值型列的空值标记为特殊值,非数值列的空值标记维持原样
在统计数量时,要排除掉不存在值和缺失值,但要把空白字符串包含在内
而进行sum计算时,会同时排除掉NaN和None。
中如何判断空值类型,又如何转化None和NaN呢?

通常情况下,我们可以借助,()和isna()来直接进行判断,这两个函数会将None和NaN都识别为空值含义。

许多函数在处理时不能接受None作为输入,因为系统倾向于把None值替换成NaN。
经过一番周折,实验工作到此告一段落,概括而言,辨别它们相当费神,同时存在诸多棘手局面,又需应对少数特殊状况,因此老海不再逐项详述。
总而言之,在具体操作时,老海主张遵循三条原则,以便确保极端情况下的数据统一

获取数据之后,我们立刻将空白符号换成None、NaN或者NULL
规则二:在运用或者numpy的过程中,我们一致把空值换成非数
法则3:在数据导入数据库时,我们将NaN统一替换为None
这些规则源自于处理特殊情况的经验积累,并非普遍适用,好处在于方法简明扼要容易记住,同时有助于减少后续数据转换可能引发的问题。
好了,今天就此结束。若对老海的讲述感兴趣,欢迎点赞评论和扩散,我是一名信息萃取者,老海
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1