赞
踩
经常混淆。
空值一般表示数据未知、不适用或将在以后添加数据。缺失值指数据集中某个或某些属性的值是不完整的。
在python中有这些空值缺失值表示:['nan', '', 'None', None, np.nan]
一般空值使用None表示,缺失值使用NaN表示。
注意: python中没有null,但是有和其意义相近的None。
pd.isnull不仅可以检测np.nan也可以检测None。
注意:pd.isnull是不可以检测字符串的,比如’',‘nan’,‘None’。这个也很好理解,字符串有字符串的判断方式。我就踩了None和'None'的坑。。。
目录
- c = None
- if isinstance(c, str):
- print('ok')
- else:
- print(type(c))
-
- # 代码输出
- # <class 'NoneType'>
'运行
None
表示空值,它是一个特殊 Python 对象, None的类型是NoneType
。None
是 NoneType 数据类型的唯一值,我们不能再创建其它 NoneType 类型的变量,但是可以将 None 赋值给任何变量。
- >>> type(None)
- <class 'NoneType'>
该对象在Python解释器启动时自动创建,解释器停止时销毁。
特点
- >>> None == 0
- False
- >>> None == ''
- False
- >>> None == False
- False
作为没有return关键函数的返回值
对于所有没有 return 语句的函数定义,Python 都会在末尾加上 return None,使用不带值的 return 语句(也就是只有 return 关键字本身),那么就返回 None。
def func()没有写返回值,那么返回值就是None
- >>> def function():
- print('hanshu')
-
- result = function()
- print(result)
- hanshu
- None
特别说明,表格中None有两种情况:
(1)空值类型的None。(2)字符串类型的“None”,是真实存在的。
- df.dropna(how='all')#删除所有内容均为缺失值的行
- df.dropna(axis=1) #丢弃有缺失值的列
- df.dropna(axis=1, how = 'all') #丢弃所有列中所有值均缺失的列
- df.dropna(axis=0, subset=['datetime', 'values'])#丢弃datetime和values这两列中有缺失值的行
可以先将“None”值replace为pandas可读取的空值,如nan,然后再用dropna()去掉即可。
df.replace(to_replace='None', value=np.nan).dropna()
但我用这个没生效。。。
当使用Numpy或者Pandas处理数据的时候,经常会遇到条目中没有没有数据,然后当我们在去打印的时候就会出现NaN。
- NaN是没有办法和任何数据进行比较。
- 它和任何值都不相等,包括他自己。
- 它的类型是float,但是和任何值做计算的结果都是NaN
- import pandas as pd
- df = pd.read_excel('/Users/mac/Desktop/test.xlsx',header=None)
- df
- 0 1 2
- 0 1 2.0 3
- 1 4 NaN 6
- 2 7 8.0 9
原数据为下图:
- >>> num = df.loc[1,1]
- >>> num
- nan
- >>> result = num + 2 # nan+2是nan哦
- >>> result
- >>> nan
nan和np.nan的关系是?一样的。
其次,我们看看Pandas中None和NaN的关联:np.nan就是NaN,数据类型float64
下面截图有问题,None不允许赋值。
有问题
Pandas中提供了一些用于
检查
或处理空值
和缺失值
的函数或方法
isnull()
和notnull()
函数可以判断数据集中是否存在
空值和缺失值缺失数据
可以使用dropna()
和fillna()
方法对缺失值进行删除和填充,如果是None则不生效。
- >>>type(None)
- <class 'NoneType'>
- >>>type(np.nan)
- <class 'float'>
- >>>type('')
- <class ''str'>
个人感觉最好用的是pd.isnull(或pd.isna)
isnull和isna区别
isnull是isna的别名,既然一样为什么要搞两个名字?Pandas dataframe是根据R的dataframe设计的,而R语言中na和null是两种不同的数据类型,因此有isna和isnull,python就保留了这两个方法,isnull是isna的别名而已;另一方面,pandas是建立在numpy之上的,numpy中又没有na或null值,而是用np.nan来表示缺失值,
所以pd.isnull不仅可以检测np.nan也可以检测None。
注意
pd.isnull是不可以检测字符串的,比如’',‘nan’,‘None’。这个也很好理解,字符串有字符串的判断方式。
比较全面的判断这些与空值有关的方法
- i == '' or
- pd.isnull(i) or
- pd.isnull(float('nan')) (或者 i =='nan') or
- i =='None'
举例
- list = ['nan', '', 'None', None, np.nan]
- for i in list:
- if i == '' or pd.isnull(i) or pd.isnull(float('nan')) or i == 'None':
- print(i)
-
- # ----------------------------
- nan
-
- None
- None
- nan
- NULL(数据库)=None(python列表)=NaN(pandas)
- 空字符(数据库)=空字符(python列表)=空字符(pandas)
- 从csv中获取数据时:空值(csv)=NULL(数据库)=NaN(pandas)
- 转为csv数据时:数据库中的NULL\空字符和pandas中的NaN\空字符,都变成csv中的空值。
参考:
图解pandas缺失值处理_pandas none赋值_尤尔小屋的猫的博客-CSDN博客
https://blog.csdn.net/Android_xue/article/details/121257528
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。