在实际应用中,数据集中经常会存在缺失值,也就是某些数据项的值并未填充或者填充不完整。
缺失值的存在可能会对后续的数据分析和建模产生影响,因此需要进行处理。

pandas提供了多种方法来处理缺失值,例如删除缺失值、填充缺失值等。
删除缺失值可能会导致数据量减少,填充缺失值则能够尽量保留原始数据集的完整性,从而提高数据分析和建模的准确性和可靠性。

当数据集中存在缺失值时,我们通常需要进行以下操作:

  1. 检查缺失值的数量和分布情况,了解缺失值对数据的影响程度。
  2. 根据数据的类型和业务需求,选择合适的缺失值处理方法,并对缺失值进行处理。
  3. 在处理缺失值的同时,要注意保持数据集的一致性和完整性。
  4. 处理完缺失值后,可以进行后续的数据分析和建模,从而得出更准确和可靠的结论。

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个可选值:

  1. any:这是默认值,表示行数据或者列数据中有一个缺失值,就删除此行或此列
  2. all:表示行数据或者列数据中所有值都缺失时,才删除此行或此列

axis也有2个可选值:

  1. 0 或 index:按行判断是否有缺失值
  2. 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小技巧】--缺失值的列的更多相关文章

  1. pandas小技巧

    1. 删除列 import pandas as pd df.drop("Unnamed: 0", axis=1, inplace=True) 2. 转换列的格式 df[" ...

  2. pandas 小技巧

    1.找出某个字段包含某字符串的行: my_df[my_df['col_B'].str.contains('大连') > 0]或者 my_df[my_df['col_B'].apply(lambd ...

  3. pandas取dataframe特定行/列

    1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...

  4. Pandas一些小技巧

    Pandas有一些不频繁使用容易忘记的小技巧 1.将不同Dataframe写在一个Excel的不同Sheet,或添加到已有Excel的不同Sheet(同名Sheet会覆盖) from pandas i ...

  5. sql里的多行多列转一行多列小技巧

    ---恢复内容开始--- [ 今天下午接受了一个紧急小任务,是将一组比赛记录统计出来,将象棋游戏玩家的两条记录在一行里面显示,进数据库看之后是首先想到的是行转列,但是一开始就觉得不对,后来写到一半确实 ...

  6. 今天整理了几个在使用python进行数据分析的常用小技巧、命令。

    提高Python数据分析速度的八个小技巧 01 使用Pandas Profiling预览数据 这个神器我们在之前的文章中就详细讲过,使用Pandas Profiling可以在进行数据分析之前对数据进行 ...

  7. pandas 之 数据清洗-缺失值

    Abstract During the course fo doing data analysis and modeling, a significant amount of time is spen ...

  8. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  9. 最强 Android Studio 使用小技巧和快捷键

    写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...

  10. Windows Azure一些小技巧集合

    我最近做了一个Windows Azure上面的项目,自己在做的过程中遇到了很多问题.有的是我自己摸索解决,有的是到网上寻找零碎的信息结合起来解决的.我感觉应当把某些解决方法集中一下,方便我以后查阅,也 ...

随机推荐

  1. 2020-08-18:介绍下MR过程?

    福哥答案2020-08-18:[来自[MapReduce执行过程及运行原理详解] 答案](https://www.panziye.com/bigdata/625.html)MapReduce执行的4个 ...

  2. 这是一道非常有争议的题,我的分析如下: TCP/IP在多个层引入了安全机制,其中TLS协议位于______。 A.数据链路层 B.网络层 C.传输层 D.应用层

    这是一道非常有争议的题,我的分析如下: TCP/IP在多个层引入了安全机制,其中TLS协议位于______. A.数据链路层 B.网络层 C.传输层 D.应用层 这道题选D吗?因为tls协议在osi七 ...

  3. 2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格,

    2022-03-24:你被请来给一个要举办高尔夫比赛的树林砍树,树林由一个 m x n 的矩阵表示, 在这个矩阵中: 0 表示障碍,无法触碰 1 表示地面,可以行走 比 1 大的数 表示有树的单元格, ...

  4. 2021-10-20:分数到小数。给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数。如果小数部分为循环小数,则将循环的部分括在括号内。输入: num

    2021-10-20:分数到小数.给定两个整数,分别表示分数的分子numerator和分母denominator,以字符串形式返回小数.如果小数部分为循环小数,则将循环的部分括在括号内.输入: num ...

  5. Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题

    Prompt工程师指南[从基础到进阶篇]:用于开发和优化提示,以有效地使用语言模型(LMs)进行各种应用和研究主题 Prompt工程是一种相对较新的学科,用于开发和优化提示,以有效地使用语言模型(LM ...

  6. Module not found: Error: Can‘t resolve ‘js-cookie‘

    Module not found: Error: Can't resolve 'js-cookie' 原因:没有安装js-cookie 解决:npm install -save js-cookie

  7. 2个场景实例讲解GaussDB(DWS)基表统计信息估算不准的处理方案

    摘要:通过2个实例场景讲解GaussDB(DWS)运维解决方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 基表统计信息估算不准的常见场景及处理方案>,作者:譡里个檔. 场 ...

  8. RT-Thread线程构建

    RT-Thread 操作系统的启动过程如下 main()函数作为其中的一个线程在运行. 如果想新建一个线程,和main()线程并行运行,步骤如下:   第一步:线程初始化函数申明 static voi ...

  9. MySQL读取的记录和我想象的不一致

    摘要:并发的事务在运行过程中会出现一些可能引发一致性问题的现象,本篇将详细分析一下. 本文分享自华为云社区<MySQL读取的记录和我想象的不一致--事物隔离级别和MVCC>,作者:砖业洋_ ...

  10. CKS 考试题整理 (09)-日志审计 log audit

    Task 在cluster中启用审计日志.为此,请启用日志后端,并确保: 日志存储在 /var/log/kubernetes/audit-logs.txt 日志文件能保留 10 天 最多保留 2 个旧 ...