首页 > 其他分享 >pandas-空值处理

pandas-空值处理

时间:2023-09-08 19:34:01浏览次数:49  
标签:None False 处理 nan NaN 空值 df np pandas

pandas-空值处理

目录

pandas中的None和NaN

type(None) --类型是 NoneType 空的对象类型

type(NaN) --类型是 float 浮点型

Pandas中None 和 NaN 都视作np.nan

numpy中的三个常量 np.NAN 、np.nan 、np.NaN 都是 float 浮点型

# pandas和numpy中任意两个缺失值不相等(np.nan \!= np.nan)
import numpy as np
import pandas as pd

print(type(np.NAN))
print(np.NAN==np.nan)
print(np.nan==np.nan)
# <class 'float'>
# False
# False

df = pd.Series(data=[None,None,None])
df.loc[:]=None
print(df)
#0    None
#1    None
#2    None

print(type(df.loc[0]))
#dtype: object
#<class 'NoneType'>

空值检测

isna()
isnull()
notnull()
import numpy as np
import pandas as pd


df = pd.DataFrame(data=np.arange(1,21).reshape(4,5),
                  columns=list('abcde'))
df.loc[1,'a'] = np.nan
df.loc[3,'b'] = np.nan
df.loc[0,'e'] = np.nan
print(df)

      a     b   c   d     e
0   1.0   2.0   3   4   NaN
1   NaN   7.0   8   9  10.0
2  11.0  12.0  13  14  15.0
3  16.0   NaN  18  19  20.0

空值检查单独使用

print(df.loc[1,:].isna())
#a     True
#b    False
#c    False
#d    False
#e    False
#Name: 1, dtype: bool

print(df.loc[2:4,:].isnull())
#a      b      c      d      e
#2  False  False  False  False  False
#3  False   True  False  False  False

print(df.loc[:,["a","c"]].notnull())
#       a     c
#0   True  True
#1  False  True
#2   True  True
#3   True  True

空值检查和any(),all()联合使用

isnull()+any()有空值就返回true
notnull()+all()检测表中是否存在空值

df2=df.loc[df.notnull().all(axis=1)]  # 找出不存在空值的 行
print(df2)
      a     b   c   d     e
#2  11.0  12.0  13  14  15.0
#4  21.0  22.0  23  24  25.0

print(df.loc[:,["a","c"]].notnull().all(axis=0))
#a    False
#c     True
#dtype: bool

print(df.loc[:,["a","c"]].notnull().all(axis=1))
#0     True
#1    False
#2     True
#3     True
#dtype: bool


空值删除(过滤)

使用 dropna() 函数可以删除包含任何缺失值的行或列。例如,删除包含任何缺失值的行:

DataFrame.dropna(self, axis=0, how='any', thresh=None, subset=None, inplace=False)

axis : {0或'index',1或'columns'},默认0 确定是否删除包含缺失值的行或列。
how : {'any','all'},默认为'any' 当我们有至少一个NA或全部NA时,确定是否从DataFrame中删除行或列。
		'any':如果存在任何NA值
		'all':如果所有值均为NA
thresh  : int,可选需要许多非NA值
subset  : 类数组,考虑的其他轴上的标签
inplace : bool,默认为False 如果为True,则执行就地操作
return  :  删除了NA条目的DataFrame。
		
dropna(axis=0)    # 删除行
dropna(axis=1)    # 删除列
import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.arange(1,21).reshape(4,5),
                  columns=list('abcde'))
df.loc[1,'a'] = np.nan
df.loc[0,'e'] = np.nan
print(df)
#      a   b   c   d     e
#0   1.0   2   3   4   NaN
#1   NaN   7   8   9  10.0
#2  11.0  12  13  14  15.0
#3  16.0  17  18  19  20.0

df1=df.dropna(axis=0)    # 删除存在空值的行
print(df1)
#      a   b   c   d     e
#2  11.0  12  13  14  15.0
#3  16.0  17  18  19  20.0


df2=df.dropna(axis=1)    # 删除存在空值的列
print(df2)
#    b   c   d
#0   2   3   4
#1   7   8   9
#2  12  13  14
#3  17  18  19

df.dropna(subset=['e'])   # 删除e中存在空值行
#      a   b   c   d     e
#1   NaN   7   8   9  10.0
#2  11.0  12  13  14  15.0
#3  16.0  17  18  19  20.0

空值填充

使用 fillna() 函数可以填充 DataFrame 中的缺失值。

DataFrame.fillna(self, value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

value : scalar(标量),dict, Series, 或DataFrame,用于填充孔的值
method  : {'backfill','bfill','pad','ffill',None},默认为None
axis : {0或'index',1或'columns'}
import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.arange(1,21).reshape(4,5),
                  columns=list('abcde'))

df2=df.fillna("$", inplace=False)   # 替换成
print(df2)
#      a     b   c   d     e
#0   1.0   2.0   3   4     $
#1     $   7.0   8   9  10.0
#2  11.0  12.0  13  14  15.0
#3  16.0     $  18  19  20.0

df.fillna("88", inplace=True)
print(df)
#      a     b   c   d     e
#0   1.0   2.0   3   4  88.0
#1  88.0   7.0   8   9  10.0
#2  11.0  12.0  13  14  15.0
#3  16.0  88.0  18  19  20.0
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                    [3, 4, np.nan, 1],
                    [np.nan, np.nan, np.nan, 5],
                    [np.nan, 3, np.nan, 4]],
                   columns=list('ABCD'))
print(df)
#     A    B   C  D
#0  NaN  2.0 NaN  0
#1  3.0  4.0 NaN  1
#2  NaN  NaN NaN  5
#3  NaN  3.0 NaN  4
df1=df.fillna(method='ffill')  # 向前或向后传播非null值
#    A   B   C   D
#0   NaN 2.0 NaN 0
#1   3.0 4.0 NaN 1
#2   3.0 4.0 NaN 5
#3   3.0 3.0 NaN 4

# 将A,  B, C 和  D 列中的所有NaN元素分别替换为0、1、2和3
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df2=df.fillna(value=values)
print(df2)
#	A   B   C   D
#0   0.0 2.0 2.0 0
#1   3.0 4.0 2.0 1
#2   0.0 1.0 2.0 5
#3   0.0 3.0 2.0 4

使用插值方法填充缺失值:

使用 interpolate() 函数可以使用插值方法填充缺失值。例如,使用线性插值:

DataFrame.interpolate(self, method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=None, **kwargs)

method : str,默认为‘linear’,‘time’: 处理每日和更高分辨率的数据,‘index’, ‘values’: 使用索引的实际数值,
					'pad':使用现有值填写NaN。‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’ 等等


import numpy as np
import pandas as pd

df = pd.DataFrame(data=np.arange(1,21).reshape(4,5),
                  columns=list('abcde'))
df.loc[1,'a'] = np.nan
df.loc[0,'e'] = np.nan
df.loc[2,'d'] = np.nan
print(df)

df1=df.interpolate()
print(df1)

#      a   b   c     d     e
#0   1.0   2   3   4.0   NaN
#1   NaN   7   8   9.0  10.0
#2  11.0  12  13   NaN  15.0
#3  16.0  17  18  19.0  20.0

#	a   b   c     d     e
#0   1.0   2   3   4.0   NaN
#1   6.0   7   8   9.0  10.0
#2  11.0  12  13  14.0  15.0
#3  16.0  17  18  19.0  20.0

参考资料

https://www.cjavapy.com/article/460/

https://www.cjavapy.com/article/541/

https://blog.csdn.net/weixin_31866177/article/details/129824293

https://www.cnblogs.com/wang_yb/p/17610655.html

标签:None,False,处理,nan,NaN,空值,df,np,pandas
From: https://www.cnblogs.com/tian777/p/17688401.html

相关文章

  • pandas-数值映射和替换
    pandas-数值映射和替换目录pandas-数值映射和替换映射map()输入字典dict输入函数替换replace()参考资料映射列值是指将一个列中的某些特定值映射为另外一些值,常用于数据清洗和转换。映射map()Series.map(arg,na_action=None)arg:接收function、dict或Series,表示映射关系;......
  • python3类实例和错误处理
    类实例classCar(object):name="Car"def__init__(self,name):self.name=name#类方法通过@classmethod装饰器实现,只能访问类变量,不能访问实例变量;通过cls参数传递当前类对象,不需要实例化。@classmethoddefrun(cls,speed):......
  • 图扑组态软件在污水处理行业中的应用
    TopLinkWebSCADA 软件(后面简称TopLink)是图扑物联自主研发的一款工业组态软件,主要应用于工业物联网边缘侧应用场景。该产品采用B/S架构,提供Web管理界面,软件包大小仅23MB,无需安装客户客户端,可通过浏览器直即可访问。软件具备工业协议解析、数据采集和转发、组态编辑、组态监......
  • Python中的异常处理机制
    finally语句是Python中异常处理机制的一部分,它总是会被执行,无论是否发生异常。finally语句通常用于释放资源或执行清理操作。下面是一个简单的例子:try:#代码段1passexceptExceptionType:#代码段2passelse:#代码段3passfinally:#代码段4......
  • 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
    下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放:项目介绍为OLED屏幕开发I2C驱动使用cuda编程加速视频处理这是此系列文章的第3篇,主要总结和记录了如何使用cuda编程释放GPU的算力.在此之前尝试过使用python调用opencv直接处理视频数据,但使用......
  • 视频监控平台EasyCVR通过Onvif无法探测对应设备如何处理
    从研发初期开始,EasyCVR安防协议视频综合管理系统就被设计为一个“全能型”平台,支持各种私有协议接入,并且还提供了onvif探测功能。使用Onvif协议的优势在于,终端用户和集成商可以使用不同制造商的技术和解决方案。该协议的支持大大拓展了EasyCVR的适用范围,使其更具广泛性。在局域网内......
  • 基本的文件处理
    基本的文件处理什么是文件:操作系统提供给用户一个虚拟单位文件有什么用:存储数据打开文件的流程1.找到文件路径path=r"F:\范围.txt" #文件名有时用的英文,\n之类的转义字符就会触发所以最好在前面加个r注释掉他们2.双击打开f=open(path,'w') #mode默认为'r'-->......
  • 异常处理
    异常处理异常:报错语法异常(错误都是SyntaxError)出现SyntaxError:invalidsyntax语法无效if #SyntaxError0=1 #SyntaxError逻辑异常(错误类型)出现ZeroDivisionError:divisionbyzero除零错误等1/0 #ZeroDivisionErrordic={}print(dic['skldfj']) #......
  • 服务器安装显卡后开机黑屏不显示处理方法
    已经安装好的服务器,假装显卡后,开机显示黑屏在服务器启动界面到按F11啥啥 F12啥啥那个界面 过去后,黑屏页面,马上按ESC  进入系统选项,以ubuntu为例,选择最上面的,然后按E  ,移动光标找到 ro quit ,找到后在ro quit 之间加东西如下ronouveau.modeset=0......
  • 服务器遭受攻击,CPU升高,流量升高,你一般如何处理?(几种攻击处理)
    服务器遭受攻击,CPU升高,流量升高,你一般如何处理?原创 六便士IT 六便士IT 2023-07-3011:00 发表于陕西收录于合集#Linux运维35个在什么情况下服务器会遭受攻击,从而导致CPU升高,流量升高1.DDoS(分布式拒绝服务攻击):这是一种常见的网络攻击方式,攻击者通过利用多个控制的机......