最近在做数据处理的时候,遇到个让我欲仙欲死的问题,那就是数据中的空值该如何获取。
我的目的本来是获取数据中的所有非零且非空值,然后再计算获得到的所有数据计算均值,再用均值把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中。
最近发现,对于pandas中的NaN值是无法直接使用 ==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. Pandas中NaN的类型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,所以其中的空值nan和numpy.nan是等价的。numpy中的nan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。
对于pandas中的空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢?
可以判断pand......
数据科学家花了大量的时间清洗数据集,并将这些数据转换为他们可以处理的格式。事实上,很多数据科学家声称开始获取和清洗数据的工作量要占整个工作的80%。因此,如果你正巧也在这个领域中,或者计划进入这个领域,那么处理这些杂乱不规则数据是非常重要的,这些杂乱数据包括一些缺失值,不连续格式,错误记录,或者是没有意义的异常值。在这个教程中,我们将利用Python的Pandas和Numpy包来进行数据清洗。主要内容如下:删除DataFrame中的不必要columns
改变DataFrame的index