最近在做数据处理的时候,遇到个让我欲仙欲死的问题,那就是数据中的空值该如何获取。

我的目的本来是获取数据中的所有非零且非空值,然后再计算获得到的所有数据计算均值,再用均值把0和空值填上。这个操作让我意识到了 i is None/ np.isnan(i) / i.isnull() 之间的差别,再此做简单介绍:

1.关于np.nan:

先明确一个问题,即空值的产生只有np.nan()一种方法。

# np.nan()的一些奇妙性质:
np.nan == np.nan
>>> False
np.isnan(np.nan)
np.nan is None
>>> False
type(np.nan)
>>> float

总结一下:

  • np.nan不是一个“空”对象,用 i is None判断是False;
  • 对某个值是否为空值进行判断,只能用np.isnan(i)函数,万万不可用 i == np.nan()来做,否则你会死的很惨的,因为空值并不能用判断相等的“==”正确识别(上例前两条);
  • np.nan非空对象,其类型为基本数据类型float(是不是很神奇,我也不知道为什么要这样设计)

2.np.isnan()和pd.isnull()何时使用:

# 首先创建一个DataFrame:
bb = pd.DataFrame({'a':[0,1,2,np.nan]})
    0	0.0
    1	1.0
    2	2.0
    3	NaN
# 先测试一下np.isnan()
np.isnan(bb)
    0	False
    1	False
    2	False
    3	True
# 值得一提的是,如果想获悉整个DataFrame有无空值,可以在此基础上这样做:
np.isnan(bb).all()
>>> a    False
    dtype: bool          # 这行是指返回值的dtype
# 再测试一下isnull()
pd.isnull(bb)
    0	False
    1	False
    2	False
    3	True

由上可见,其实np.isnan()和pd.isnull()都可以对不论是DataFrame、Python list还是仅仅一个数值进行空值检测。但一般在实际应用中,np.isnan()多用于单个值的检验,pd.isnull()用于对一个DataFrame或Series(整体)的检验。

此外,根据pandas官方文档和源代码,pandas提供的另一个函数pd.isna()与pd.isnull()完全一样。

上面提到的any()/all()函数,请见pandas文档:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.all.html#pandas.DataFrame.all

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.any.html#pandas.DataFrame.any

其他与空值检测或删除相关的函数还有:notna()、fillna()、dropna()等等。实战中应灵活使用。

最近在做数据处理的时候,遇到个让我欲仙欲死的问题,那就是数据中的空值该如何获取。我的目的本来是获取数据中的所有非零且非空值,然后再计算获得到的所有数据计算均值,再用均值把0和空值填上。这个操作让我意识到了i is None/np.isnan(i)/i.isnull()之间的差别,再此做简单介绍:1.关于np.nan:先明确一个问题,即空值的产生只有np.nan()一种方法。# n... nan = [i for i in range(len(s)) if np.isnan(s[i])] np.isnan(x)函数可以判断x是否为空值,然后输出布尔类型的变量、 那么该处np.nan()作用即是将data数据的第三列不为空值数据依次存放到nan
最近发现,对于pandasNaN值是无法直接使用 ==np.nan来判断空值,以为在数学,inf==inf,而nan != nan,可以通过编写代码发现下面的情况。 >>> np.nan == np.nan False 那么我们在判断一个值为空值的可以下面的形式 >>print(np.isnan(np.nan)) 可以得知,对空值的判...
stackExchange链接 原作者:Djib2011 Pandas isna() vs isnull() 我觉得要说的对象是pandas.DataFrame.isna() vs pandas.DataFrame.isnull()。注意不要把它俩和pandas.isnull()混淆了——它不是用于DataFrame的。 一句话:这俩函数的功用一模一样!它俩连官方文档都相同。你点击pandas的官...
文章目录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基于numpy,所以其空值nannumpy.nan是等价的。numpynan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。 对于pandas空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢? 可以判断pand......
数据科学家花了大量的时间清洗数据集,并将这些数据转换为他们可以处理的格式。事实上,很多数据科学家声称开始获取和清洗数据的工作量要占整个工作的80%。因此,如果你正巧也在这个领域,或者计划进入这个领域,那么处理这些杂乱不规则数据是非常重要的,这些杂乱数据包括一些缺失值,不连续格式,错误记录,或者是没有意义的异常值。在这个教程,我们将利用PythonPandasNumpy包来进行数据清洗。主要内容如下:删除DataFrame的不必要columns 改变DataFrame的index