经常混淆。

空值 一般表示数据未知、不适用或将在以后添加数据。 缺失值 指数据集中某个或某些属性的值是不完整的。

在python中有这些空值缺失值表示:['nan', '', 'None', None, np.nan]

一般空值使用None表示,缺失值使用NaN表示。

注意: python中没有null,但是有和其意义相近的None。

pd.isnull不仅可以检测np.nan也可以检测None。
注意: pd.isnull是不可以检测字符串的,比如’',‘nan’,‘None’。这个也很好理解,字符串有字符串的判断方式。

我就踩了None和'None'的坑。。。

1. None

1.1 None 与 'None'

1.1.1 处理空值类型的None

1.1.2 处理字符串类型的None

2. NaN

3. Pandas特别说明

判断缺失值方法

4. Pandas如何检测None和Nan

4.1 如何检测

5. 个人理解的等式

1. 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 不支持任何运算
  • None 和任何其他的数据类型比较永远返回False
  • None 有自己的数据类型NoneType,不能创建其他NoneType对象(它只有一个值None)
  • None 与0、空列表、空字符串不一样
  • 可以将None赋值给任何变量,也可以给None值变量赋值
  • None是没有像len,size等属性的,要判断一个变量是否为None,直接使用
>>> 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有两种情况:

(1)空值类型的None。(2)字符串类型的“None”,是真实存在的。

1.1 None 与 'None'

1.1.1 处理空值类型的None

df.dropna(how='all')#删除所有内容均为缺失值的行
df.dropna(axis=1) #丢弃有缺失值的列
df.dropna(axis=1, how = 'all') #丢弃所有列中所有值均缺失的列
df.dropna(axis=0, subset=['datetime', 'values'])#丢弃datetime和values这两列中有缺失值的行

1.1.2 处理字符串类型的None

可以先将“None”值replace为pandas可读取的空值,如nan,然后再用dropna()去掉即可。

df.replace(to_replace='None', value=np.nan).dropna()

但我用这个没生效。。。

2. NaN

当使用Numpy或者Pandas处理数据的时候,经常会遇到条目中没有没有数据,然后当我们在去打印的时候就会出现NaN。

  • NaN是没有办法和任何数据进行比较。
  • 它和任何值都不相等,包括他自己。
  • 它的类型是float,但是和任何值做计算的结果都是NaN
import pandas as pd
df = pd.read_excel('/Users/mac/Desktop/test.xlsx',header=None)
    0   1   2
0   1   2.0 3
1   4   NaN 6
2   7   8.0 9

原数据为下图:

>>> num = df.loc[1,1] 
>>> result = num + 2  # nan+2是nan哦
>>> result 

nan和np.nan的关系是?一样的。

3. Pandas特别说明

  • 在pandas中的空值是""(直接一对双引号);空字符串:" ",中间多了一个空格
  • 缺失值在DataFrame指的是NaN或者NaT,在Series中指的是none或者nan
  • 当我们需要人为指定一个缺失值的时候,默认用None和np.nan来表示

 其次,我们看看Pandas中None和NaN的关联:np.nan就是NaN,数据类型float64

  • 在我们创建的时候,默认二者是相同的;
  • 如果我们指定赋值为None,在Series中依然会变成none,并且是以float64的数据类型显示。

下面截图有问题,None不允许赋值。

判断缺失值方法

 Pandas中提供了一些用于检查处理空值缺失值的函数或方法

  • 使用isnull()notnull()函数可以判断数据集中是否存在空值和缺失值
  • 对于缺失数据可以使用dropna()fillna()方法对缺失值进行删除和填充,如果是None则不生效。

4. Pandas如何检测None和Nan

  • None是Python的特殊类型,NoneType对象,它只有一个值None。它不支持任何运算也没有任何内建方法。None和任何其他的数据类型比较永远返回False。None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
>>>type(None)
<class 'NoneType'>
  • python 中Nan是not a number(非数)它即不是无穷大, 也不是无穷小,无穷大减无穷大会导致NaN,无穷大乘以0或无穷小或除以无穷大会导致NaN,有NaN参与的运算, 其结果也一定是NaN,NaN != NaN
>>>type(np.nan)
<class 'float'>
  • NULL 空字符串(python里没有null这个类型)
>>>type('')
<class ''str'>

4.1 如何检测

个人感觉最好用的是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)
# ----------------------------

5. 个人理解的等式

  • NULL(数据库)=None(python列表)=NaN(pandas)
  • 空字符(数据库)=空字符(python列表)=空字符(pandas)
  • 从csv中获取数据时:空值(csv)=NULL(数据库)=NaN(pandas)
  • 转为csv数据时:数据库中的NULL\空字符pandas中的NaN\空字符,都变成csv中的空值。

None、null和NaN - 简书

图解pandas缺失值处理_pandas none赋值_尤尔小屋的猫的博客-CSDN博客

http://t.csdn.cn/x4Fx2

https://blog.csdn.net/Android_xue/article/details/121257528

经常混淆。空值一般表示数据未知、不适用或将在以后添加数据。缺失值指数据集中某个或某些属性的值是不完整的。一般空值使用None表示,缺失值使用NaN表示。注意: python中没有null,但是有和其意义相近的None。 -在能够使用大型数据集训练学习算法之前,我们通常需要先清理数据, 也就是说,我们需要通过某个方法检测并更正数据的错误。 - 任何给定数据集可能会出现各种糟糕的数据,例如离群值或不正确的值,但是我们几乎始终会遇到的糟糕数据类型是缺少值。 - Pandas 会为缺少的值分配 NaN 值。 创建一个具有NaN值得 Data Frame import pandas a...
文章目录1. 检查缺失值NaN2. PandasNaN的类型3. NaN的删除 dropna()3.1 删除所有值均缺失的行/列3.2 删除至少包含一个缺失值的行/列3.3 根据不缺少值的元素数量删除行/列3.4 删除特定行/列缺少值的列/行4. 缺失值NaN的替换(填充) fillna()4.1 用通用值统一替换4.2 为每列替换不同的值4.3 用每列的平均值,位数,众数等替换4.4 替换为上一个或下一个值 当使用pandas读取csv文件时,如果元素为空,则将其视为缺失值NaN(Not a Num
使用pandas的时候经常需要检测空值,但每次感觉都判断不全或者感觉很困惑,因此这里做个简单的总结 None是Python的特殊类型,NoneType对象,它只有一个值None.它不支持任何运算也没有任何内建方法。None和任何其他的数据类型比较永远返回False。None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。 >>>type(None) <class 'NoneType'> 当前的内容用于本人复习使用,主要是针对Pandas读取数据出现NaN值时的处理,以及读取的时候产生?或者其他值的处理,还有分组和统计。 2.处理NaN值 在读取数据的时候可能出现某个值缺失,这个时候Pandas默认使用NaN代替缺失值! 准备具有确实值的数据: import pandas as pd import numpy as np pd_dataFrame = pd.rea... 空值:在pandas空值是"" 缺失值:在dataframenan或者naT(缺失时间),在series为none或者nan即可 3.函数具体解释 DataFrame.dropna(axis=0, how='any', thresh=None, subset=N...
pandas基于numpy,所以其空值nan和numpy.nan是等价的。numpynan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。 对于pandas空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢? 可以判断pand......
`null`和`NaN`都表示缺失值,但它们来自不同的语言和库。 - `null`是Python语言的一个关键字,表示一个空对象或空指针,意味着没有值。在Pandas,`null`通常用`None`来表示。 - `NaN`是Not a Number的缩写,是IEEE浮点数算术标准定义的特殊值。`NaN`通常表示一个不是数字的数字,或者是由于某些原因无法进行数学运算的结果。 在Pandas,`NaN`用于表示缺失值。当数据存在缺失值时,Pandas会将其视为`NaN`。在DataFrame,`NaN`通常用于表示缺失的数字、字符串、对象等类型的数据。在Pandas,可以使用`isnull()`函数来检查DataFrame的缺失值,也可以使用`fillna()`函数来填充缺失值。 总的来说,`null`和`NaN`都是用于表示缺失值的特殊值,但是它们来自不同的语言和库。在Pandas,我们通常使用`NaN`来表示缺失值。
sdbhewfoqi: 在召回中,目标为pairwise learningToRank(LTR),衡量的相对准确性。例如sampled softmax loss/ BRP loss / hingle loss。 不是与label进行比较,而是多个item与label的匹配得分相互比较。 在排序中,目标为pairwise loss。衡量的是绝对准确性。