Pandas缺失值处理

目录

NaN

加载包含缺失的数据

查看缺失值

通过info函数查看缺失值

通过isnull函数查看缺失值

通过notnull函数查看缺失值

通过isnull().sum()统计空值

缺失值处理

准备数据

dropna删除缺失值

fillna平均值填充缺失值

fillna前后值填充缺失值

interpolate线性插值


NaN

  • 数据库中,缺失数据表示为NULL

  • 在某些编程语言中用NANone表示

  • 缺失值也可能是空字符串''或数值 0

  • 在Pandas中使用NaN表示缺失值

    • Pandas中的NaN值来自NumPy库,NumPy中缺失值有几种表示形式:NaN,NAN,nan,他们都一样

  • 缺失值和其它类型的数据不同,它毫无意义,NaN不等于0,也不等于空字符串 

from numpy import NaN,NAN,nan

print(NaN==True)  # False
print(NaN==False)  # False
print(NaN==0)  # False
print(NaN=='')  # False
print(NaN==None)  # False
print(NaN==NaN)  # False
print(NaN==nan)  # False
print(NaN==NAN)  # False
print(nan==NAN)  # False

加载包含缺失的数据

加载数据时可以通过 keep_default_nana_values 指定加载数据时的缺失值

1)加载数据,观察缺失值默认的显示情况

import pandas as pd

df = pd.read_csv('../data/c_city_day.csv')
df.head()

2) 使用keep_default_na=False参数加载数据,不显示默认缺失值

df = pd.read_csv('../data/c_city_day.csv', keep_default_na=False)
df.head()

3) 使用na_values参数加载数据,通过该参数指定我们认为的缺失值

# 在这里我们通过na_values参数,指鹿为马
df = pd.read_csv('../data/c_city_day.csv', na_values=["Ahmedabad", "2015-01-01"], keep_default_na=True)
df.head(20)

查看缺失值

通过info函数查看缺失值

import pandas as pd

df = pd.read_csv('../data/c_city_day.csv')
df.info()

通过isnull函数查看缺失值

  • pd.isnullpd.isna用法相同

df.head().isnull()
print('===============')
df.head().isna()

通过notnull函数查看缺失值

  • notnull函数和notna函数相同,判断是否存在非缺失值;与isnull函数对应,返回结果正好相反

df.head().notnull()
print('==================')
df.head().notna()

通过isnull().sum()统计空值

print(df['PM2.5'].isnull().sum())
print(df['PM2.5'].notnull().sum())

缺失值处理

  • 删除缺失值:删除缺失值会损失信息,并不推荐删除,当缺失数据占比较高的时候,或可以忽略相关性时,可以尝试使用删除缺失值

  • 填充缺失值:填充缺失值是指用一个估算的值来去替代缺失数

    • 平均值、中位数

    • 前后值填充,数据呈现顺序变化的时候可以使用缺失值前边或后边的值进行填充

  • 线性插值:假定数据点之间存在严格的线性关系,并利用相邻数据点中的非缺失值来计算缺失数据点的值

准备数据

#%%
import pandas as pd
df = pd.read_csv('../data/c_city_day.csv')
# 随机获取10条数据
df2 = df.sample(n=10, random_state=5)
df2

dropna删除缺失值

df.dropna(axis = 0,how = 'any' ,inplace = True, subset = ['列名1','列名2',,,], thresh = n)

  • axis=0

    • 可选参数 ,默认为0按行删

    • 0, or 'index':删除包含缺失值的行

    • 1, or 'columns':删除包含缺失值的列

  • how='any'

    • 可选参数,默认为any

    • any: 如果存在NA值,则删除该行或列

    • all: 如果所有值都是NA,则删除该行或列

  • inplace=False

    • 可选参数,不建议使用这个参数

    • 默认False, 不对原数据集进行修改

    • inplce=True,对原数据集进行修改

  • subset接收一个列表

    • 接收一个列表,列表中的元素为列名: 对特定的列进行缺失值删除处理

  • thresh=n

    • 可选参数

    • 参数值为int类型,按行去除NaN值,去除NaN值后该行剩余数值的数量(列数)大于等于n,便保留这一行

1) 删除含有缺失值的行数据

df2.dropna()

2) 删除含有缺失值的列

# 删除含有缺失值的列
df2.dropna(axis=1)

3) 删除指定列中含有缺失值的行数据

# # 删除指定列中含有缺失值的行数据
df2.dropna(how='any', subset=['PM2.5', 'Xylene', 'AQI'])

4) 删除指定列中都含有缺失值的行数据

# 删除指定列中都含有缺失值的行数据
df2.dropna(how='all', subset=['PM2.5', 'Xylene', 'AQI'])

5)  删除非空值小于12的行数据

# 删除含有缺失值的行数据, 剩余非空值个数大于等于12的行数据保留
df2.dropna(thresh=12)

fillna平均值填充缺失值

# 目标: 用平均值填充PM2.5的缺失值
# 1 加载数据
df = pd.read_csv("../data/c_city_day.csv")
# 2 验证缺失值
df.info() # 总: 29531  PM2.5: 24933

# 3 求平均值
pm25_mean = df['PM2.5'].mean()
print(pm25_mean) # 67.45057794890272

# 4 填充平均值
df['PM2.5'].fillna(pm25_mean, inplace=True)

# 5 验证
df.info() # 总: 29531  PM2.5: 29531
print(df['PM2.5'].mean())

fillna前后值填充缺失值

时序数据在某一列值的变化往往有一定线性规律,绝大多数的时序数据,具体的列值随着时间的变化而变化,所以对于有时序的行数据缺失值处理可以 使用上一个非空值或下一个非空值填充

1) 使用上一个非空值填充空值

  • 使用上一个非空值(参数method='ffill')填充Xylene(二甲苯)的空值

    • “ffill” 的全称是 “forward ffill”,即前向填充

# 加载数据
df = pd.read_csv('../data/c_city_day.csv')
s1 = df['Xylene'][54:64]
print(s1)
# 使用前一个非空值填充空值
print('---------------------------')
print(s1.fillna(method='ffill'))

2) 使用下一个非空值填充空值

  • 使用下一个非空值(参数method='bfill')填充整个数据集的空值

    • “bfill” 的全称是 “backward fill”,即反向填充。

# 加载数据
df = pd.read_csv('../data/c_city_day.csv')
s1 = df['Xylene'][54:64]
print(s1)
print('---------------------------')
print(s1.fillna(method='bfill'))

interpolate线性插值

绝大多数的时序数据,具体的列值随着时间的变化而变化。 因此,除了使用bfill和ffill进行插补以外还可以使用线性插值法:它假定数据点之间存在严格的线性关系,并利用相邻数据点中的非缺失值来计算缺失数据点的值。
  • 使用df.interpolate(limit_direction="both") 对缺失数据进行线性填充

  • 使用series_obj.interpolate(limit_direction="both") 对缺失数据进行线性填充

# 加载数据
df = pd.read_csv('../data/c_city_day.csv')
s1 = df['Xylene'][54:64]
print(s1)
print('---------------------------')
print(s1.interpolate(limit_direction='both'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892965.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中的vector二维数组(全面详解)

目录 二维数组概念: 二维数组格式: 二维数组的初始化: 在创建的时候就进行初始化: resize初始化: 构造v的时候只给行数,列数用resize开辟 构造v的时候不给行数不给列数,都用resize来开辟…

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol B…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念,用函数表达式来描述是这样的:f(x) f(f(x)) 。在程序开发中,则是指同一个业务,执行一次或多次对业务状态的影响是一致的。有些业务…

【C语言】循环中断break

在循环使用过程中,可能遇到某些情况需要终止循环。比如按座位查找一位学生,循环查找,找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断,查找到根号n停止:一个合数等于两个数的乘积…

Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建

1.下载cocos2d-x-3.17.2 源码: Cocos2d-x - 成熟、轻量、开放的跨平台解决方案 2.下载Python2 Python 2.7.0 Release | Python.org 加入环境变量: 测试版本

机器学习—特性缩放

特性缩放的技术能使梯度下降运行得更快,让我们先来看看功能大小之间的关系,这就是该特性的数字和相关参数的大小,作为一个具体的例子,让我们用两个特征来预测房子的价格,X1代表一个房子的大小,X2代表两个卧…

做安全后,再也不想打麻将了...

有时候,打麻将不是消遣,而是工作日常 摸起的每一张牌,可能都透露着安全从业者背后的“心酸”...... 看看下面经历,是否似曾相识!

2010年国赛高教杯数学建模A题储油罐的变位识别与罐容表标定解题全过程文档及程序

2010年国赛高教杯数学建模 A题 储油罐的变位识别与罐容表标定 通常加油站都有若干个储存燃油的地下储油罐,并且一般都有与之配套的“油位计量管理系统”,采用流量计和油位计来测量进/出油量与罐内油位高度等数据,通过预先标定的罐容表&#…

计算机网络基础(1)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 计算机网…

解锁中东北非市场:Flat Ads通过效果营销赋能企业高效增长

10 月 15 日至 16 日,Flat Ads 参加了在土耳其伊斯坦布尔举行的 Mobidictum Conference 2024,这场土耳其乃至中东与北非地区规模最大的游戏产业盛会,吸引了来自全球的顶尖游戏企业、开发者和营销服务商。作为全球领先的营销平台,Flat Ads 在此次大会上重点展示了基于效果营销的…

STM32 USB CUBEMX

开发背景 使用的平台:STM32H750 注意事项 时钟必须是48MHZ,其它都不行 2. 将默认任务的堆栈设大一点 如果使用操作系统,USB任务跑在默认任务里,因此需要设置默认任务的堆栈缓存是直接定义的全局变量,需要设置编译器…

黑马程序员C++提高编程学习笔记

黑马程序员C提高编程 提高阶段主要针对泛型编程和STL技术 文章目录 黑马程序员C提高编程一、模板1.1 函数模板1.1.1 函数模板基础知识 案例一: 数组排序1.2.1 普通函数与函数模板1.2.2 函数模板的局限性 1.2 类模板1.2.1 类模板的基础知识1.2.2 类模板与函数模板1.…

机器学习在聚合物及其复合材料中的应用与实践

在当前的工业和科研领域,聚合物及其复合材料因其卓越的物理和化学性能而受到广泛关注。这些材料在航空航天、汽车制造、能源开发和生物医学等多个行业中发挥着至关重要的作用。随着材料科学的发展,传统的实验和理论分析方法已逐渐无法满足新材料研发的需…

使用Python进行GRPC和Dubbo协议的高级测试

01 GRPC测试 GRPC(Google Remote Procedure Call)是一种高性能、开源的远程过程调用(RPC)框架,由 Google开发并基于Protocol Buffers(protobuf)进行通信。它使用了HTTP/2协议作为传输层&#x…

纯css实现瀑布流! 附源码!!!

瀑布流用于展示图片信息,我这里用的背景颜色来代替图片 PC端效果 源码(直接复制粘贴就可以运行了!!!) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>PC端瀑布流</title><style>.box {w…

Github 优质项目推荐(第七期)

文章目录 Github优质项目推荐 - 第七期一、【LangGPT】&#xff0c;5.7k stars - 让每个人都成为提示专家二、【awesome-selfhosted】&#xff0c;198k stars - 免费软件网络服务和 Web 应用程序列表三、【public-apis】&#xff0c;315k stars - 免费 API四、【JeecgBoot】&am…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…

UE4 材质学习笔记10(程序化噪波/覆雪树干着色器/岩层着色器)

一.程序化噪波 柏林噪波是一种能生成很好的随机图案的算法&#xff0c;它是一个无限的、不重复的图案&#xff0c;可以采用这种基础图案并以多种方式对其进行修改&#xff0c; 将它缩放并进行多次组合&#xff0c;就可以创建一个分形图案。这些组合的缩放等级称为一个Octave 这…

docker数据管理和网络通信+docker实例+dockerfile镜像实战

一、Docker 的数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷&#xff08;主机和容器间的挂载&#xff09; 数据卷是一个供容器…

Python爬虫教程:Selenium可视化爬虫的快速入门

网络爬虫作为获取数据的一种手段&#xff0c;其重要性日益凸显。Python语言以其简洁明了的语法和强大的库支持&#xff0c;成为编写爬虫的首选语言之一。Selenium是一个用于Web应用程序测试的工具&#xff0c;它能够模拟用户在浏览器中的操作&#xff0c;非常适合用来开发可视化…