【pandas小技巧】--缺失值的列
在实际应用中,数据集中经常会存在缺失值,也就是某些数据项的值并未填充或者填充不完整。
缺失值的存在可能会对后续的数据分析和建模产生影响,因此需要进行处理。
pandas提供了多种方法来处理缺失值,例如删除缺失值、填充缺失值等。
删除缺失值可能会导致数据量减少,填充缺失值则能够尽量保留原始数据集的完整性,从而提高数据分析和建模的准确性和可靠性。
当数据集中存在缺失值时,我们通常需要进行以下操作:
- 检查缺失值的数量和分布情况,了解缺失值对数据的影响程度。
- 根据数据的类型和业务需求,选择合适的缺失值处理方法,并对缺失值进行处理。
- 在处理缺失值的同时,要注意保持数据集的一致性和完整性。
- 处理完缺失值后,可以进行后续的数据分析和建模,从而得出更准确和可靠的结论。
1. 缺失值统计
首先我们随机创建一个包含缺失值的测试数据集,这里用到之前介绍过的创建测试数据的技巧。
import pandas as pd
def get_random_missing_data():
df = pd.util.testing.makeMissingDataframe()
return df[df.isna().any(axis=1)]
df = get_random_missing_data()
df

这里我封装了一个简单的函数get_random_missing_data,通过这个函数,可以创建一个每行至少有一个缺失值的数据集。
注意:这是随机创建的数据集,所以每次运行的结果会不一样。
统计缺失值很简单,首先通过isna函数找出所有缺失的值,然后可以使用sum或者mean来统计缺失的数量和比例。
df.isna().sum()

sum函数返回的是每一列缺失值的数量。
df.isna().mean()

mean函数返回的值可以看做每一列缺失值占的比例。
2. 删除缺失值
处理缺失值时,有些场景为了保证数据的完整性,只能删掉有缺失的数据。
删除缺失值有2个重要的参数:how 和 axis。
how有2个可选值:
- any:这是默认值,表示行数据或者列数据中有一个缺失值,就删除此行或此列
- all:表示行数据或者列数据中所有值都缺失时,才删除此行或此列
axis也有2个可选值:
- 0 或 index:按行判断是否有缺失值
- 1 或 columns:按列判断是否有缺失值
how="any",axis=0的情况:每行数据中只要有一个缺失值就删除该行。
df = pd.DataFrame(
{
"A": [1, 2, 3, np.nan],
"B": [1, np.nan, 3, 4],
"C": [1, 2, np.nan, 4],
"D": [1, 2, 3, 4],
}
)
df.dropna(how="any", axis=0)

how="all",axis=0的情况:每行数据中,全部值都缺失的行才删除。
df = pd.DataFrame(
{
"A": [1, np.nan, 3, np.nan],
"B": [1, np.nan, 3, 4],
"C": [1, np.nan, np.nan, 4],
"D": [1, np.nan, 3, 4],
}
)
df.dropna(how="all", axis=0)

how="any",axis=1的情况:每列数据中只要有一个缺失值就删除该列。
df = pd.DataFrame(
{
"A": [1, 2, 3, np.nan],
"B": [1, np.nan, 3, 4],
"C": [1, 2, np.nan, 4],
"D": [1, 2, 3, 4],
}
)
df.dropna(how="any", axis=1)

how="all",axis=1的情况:每列数据中,全部值都缺失的列才删除。
df = pd.DataFrame(
{
"A": [np.nan, np.nan, np.nan, np.nan],
"B": [1, np.nan, 3, 4],
"C": [1, 2, np.nan, 4],
"D": [1, np.nan, 3, 4],
}
)
df.dropna(how="all", axis=1)

3. 填充缺失值
填充缺失值一般使用fillna函数指定填充什么样的值。
比如:
df = pd.DataFrame(
{
"A": [1, 2, 3, np.nan],
"B": [1, np.nan, 3, 4],
"C": [1, 2, np.nan, 4],
"D": [1, 2, 3, 4],
}
)
df.fillna(-1)

这里是用 -1 来填充的,根据实际情况可以使用任意合适的值来填充。
除了 fillna 函数之外,还有一个interpolate函数,能够更加合理的填充缺失值。
df = pd.DataFrame(
{
"A": [1, 3, 4, np.nan],
"B": [2, np.nan, 2, 4],
"C": [3, 3, np.nan, 3],
"D": [4, 1, np.nan, 4],
}
)
df.interpolate()

每个缺失值都是它上下两行的值的平均值。
如果只有上面行的值,那就直接用上面行的值。
这里有个注意的地方:如果是第一行有缺失的话,那么是无法填充的。
比如:
df = pd.DataFrame(
{
"A": [np.nan, 3, np.nan, np.nan],
"B": [2, np.nan, 2, 4],
"C": [3, 3, np.nan, 3],
"D": [4, 1, np.nan, 4],
}
)
df.interpolate()

第一行的缺失值没有上一行可以参照,还是维持原来缺失的状态。
所以使用 interpolate 进行填充时,注意第一行的缺失值状态,可以用 fillna 先处理第一行。
【pandas小技巧】--缺失值的列的更多相关文章
- pandas小技巧
1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...
- pandas 小技巧
1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...
- pandas取dataframe特定行/列
1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...
- Pandas一些小技巧
Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...
- sql里的多行多列转一行多列小技巧
---恢复内容开始--- [ 今天下午接受了一个紧急小任务,是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行转列,但是一开始就觉得不对,后来写到一半确实 ...
- 今天整理了几个在使用python进行数据分析的常用小技巧、命令。
提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...
- pandas 之 数据清洗-缺失值
Abstract During the course fo doing data analysis and modeling, a significant amount of time is spen ...
- 前端网络、JavaScript优化以及开发小技巧
一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...
- 最强 Android Studio 使用小技巧和快捷键
写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...
- Windows Azure一些小技巧集合
我最近做了一个Windows Azure上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...
随机推荐
- 【Vue2】编程式路由导航
在Vue Router中,除了使用 创建 a 标签来定义导航链接之外,还可以使用Vue Router通过编写代码来实现导航. 他提供的三个实例方法:router.push.router.replace ...
- 2020-09-29:介绍volatile功能。
福哥答案2020-09-29:#福大大架构师每日一题# 功能如下:1.内存可见.2.禁止指令重排序. 实现如下:1.字节码层面 ACC_VOLATILE 2.JVM层面volatile内存区的读写 都 ...
- 2020-01-04:mysql里的innodb引擎的数据结构,你有看过吗?
福哥答案2020-01-04: 面试官刚开始问我看过mysql源码没,然后问了这个问题.回答B+树,过不了面试官那关.答案来自<MySQL技术内幕 InnoDB存储引擎 第2版>第四章,时 ...
- LOTO示波器如何测试阻抗的频响曲线
LOTO示波器如何测试阻抗的频响曲线 模块的输入输出端口,在电路分析上,一般简单表征为电阻来进行计算和分析.但多数情况下,这些端口并不是纯电阻的特性,更精确一些,它可能是电阻电容以及电感的组合,表现为 ...
- Vue 异步通信Axios
使用Axios实现异步通信需要先导入cdn: <script src="https://unpkg.com/axios@1.4.0/dist/axios.min.js"> ...
- 如何在前端应用中合并多个 Excel 工作簿
本文由葡萄城技术团队于博客园原创并首发.葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言|问题背景 SpreadJS是纯前端的电子表格控件,可以轻松加载 Excel 工作簿中的数据 ...
- drf——jwt
jwt原理 使用jwt认证和使用session认证的区别 三段式 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm ...
- 聊一聊 Python 安装中的 --enable-shared
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. 今天在 CentOS 7.4 使用源码编译安装 Python-2.7.15 的时候,发现了一个 ...
- Java如何实现去重?这是在炫技吗?
大家好,我3y啊.由于去重逻辑重构了几次,好多股东直呼看不懂,于是我今天再安排一波对代码的解析吧.austin支持两种去重的类型:N分钟相同内容达到N次去重和一天内N次相同渠道频次去重. Java开源 ...
- oracle常用函数(持续更新)
1.table() 把返回结果集合的函数返回的结果,以表的形式返回 例:table(p_split('1,2,3'),',') 2.to_char() 按照指定格式输出字符串 to_char(sysd ...