.dropna()详解

一、dropna()删除含零行

在数据处理中,经常会遇到缺失值的情况,这时使用dropna()函数可以将含有缺失值的行或列删除。当dropna()不带参数时,默认删除含有任意NaN值的整行数据。

import pandas as pd
import numpy as np

# 创建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, 3, 4]})

# 使用dropna()删除缺失值
df = df.dropna()

print(df)

执行以上代码,输出结果如下:

     A    B  C
1  2.0  6.0  2

从结果中可以看到,原本的DataFrame有4行,由于第0行和第2行中都存在缺失值,因此被删除,仅剩下含有完整数据的1号和3号行。

二、drop那个键

除了按行删除,dropna()函数还可以按照列删除。为了方便,pandas 提供了「按行或按列」删除缺失值的简单方法——交由数据帧调用 dropna(),而不必调用比较古老的 numpy 函数 delete(可以把某一行(列)的所有 NaN 元素删除,当然指定删除 0 列(行)或者当作输入数据 X 后进行删除也是完全 ok 的)。

# 创建带有缺失值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, np.nan, 4]})

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

print(df)

执行以上代码,输出如下:

   C
0  1
1  2
2  NaN
3  4

可以看到,原本的DataFrame中包含有两列(A和B)含有缺失值,因此被删除,只剩下完整数据的C列。

三、dropna python

Python自带的处理缺失值的方法是使用None来代表缺失值,和pandas中的NaN属于不同概念,因此也需要单独处理。

# 创建包含None值的DataFrame
df = pd.DataFrame({'A': [1, 2, None, 4],
                   'B': [None, 6, None, 8],
                   'C': [1, 2, 3, 4]})

# 使用dropna()删除含有None值的行
df = df.dropna()

print(df)

执行以上代码,输出结果如下:

     A    B  C
1  2.0  6.0  2
3  4.0  8.0  4

结果中可以看到,由于第0和第2行含有缺失值None,被成功删除了,仅剩下这个DataFrame中全部都是完整数据的1号和3号行。

四、drop哪些词能替换

dropna()函数支持多种参数。除了前面已经提到的默认按行删除,还可以通过设置thresh参数删除非NaN值少于某个阈值的行数据。

# 创建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, 3, 4]})

# 使用thresh参数删除非NaN值少于2个的行
df = df.dropna(thresh=2)

print(df)

执行以上代码,输出结果如下:

     A    B  C
0  1.0  NaN  1
1  2.0  6.0  2
3  4.0  8.0  4

从输出结果中可以看到,原本有1号、2号、3号三个行,而第0行由于非NaN值只有一个“A:1”,没有达到阈值被删除,输出结果中只剩下了剩下三行完整的数据。

五、dropna中how参数若为all表示什么

how=’all’意为仅在被删行/列中全部都是NaN值时,该行/列才会被删除。

# 创建包含NaN值的DataFrame
df = pd.DataFrame({'A': [np.nan, np.nan, np.nan, np.nan],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [np.nan, np.nan, np.nan, np.nan]})

# 使用how参数删除全部为NaN值的列
df = df.dropna(axis=1, how='all')

print(df)

执行以上代码,输出结果如下:

     B
0  2.0
1  6.0
2  7.0
3  8.0

从输出结果中可以看到,原本只剩下全部都是NaN值的A和C两列,而在使用了how=’all’参数后,只删除了A和C两列。

六、drop能按条件删除吗

除了删除NaN值,dropna()函数还支持按条件删除符合特定条件的行或列。例如,以下例子演示了如何删除”A”列中的所有大于3的值。

# 创建一个包含5个人4科目成绩的DataFrame
df = pd.DataFrame({'Name': ['Tom', 'William', 'John', 'Kim', 'Adam'],
                   'Math': [70, 58, 48, 90, 72],
                   'English': [85, 76, 50, 92, 62],
                   'French': [72, 56, 65, 90, 80],
                   'Science': [84, 68, 82, 95, 70]})

# 使用条件删除"A"列中所有大于3的行
df = df.drop(df[df['Math'] > 70].index)

print(df)

执行以上代码,输出结果如下:

      Name  Math  English  French  Science
0      Tom    70       85      72       84
1  William    58       76      56       68
2     John    48       50      65       82
4     Adam    72       62      80       70

从输出结果中可以看到,仅被“A”列中的Math成绩大于70的Tom行从原本的DataFrame中删除了。

七、drop能回退吗

dropna()删除行或列是不可逆操作,除非保留原始数据,否则无法恢复被删除的数据。因此,建议在删除前先备份原始数据。

# 创建一个包含5个人4科目成绩的DataFrame
df = pd.DataFrame({'Name': ['Tom', 'William', 'John', 'Kim', 'Adam'],
                   'Math': [70, 58, np.nan, 90, 72],
                   'English': [85, 76, 50, 92, 62],
                   'French': [72, 56, 65, 90, 80],
                   'Science': [84, 68, 82, 95, np.nan]})

# 备份原始数据
df_backup = df.copy()

# 删除含有NaN值的行
df = df.dropna()

print(df)

# 恢复原始数据
df = df_backup.copy()

print(df)

执行以上代码,输出结果如下:

      Name  Math  English  French  Science
0      Tom  70.0       85      72     84.0
1  William  58.0       76      56     68.0
3      Kim  90.0       92      90     95.0

      Name  Math  English  French  Science
0      Tom  70.0       85      72      NaN
1  William  58.0       76      56     68.0
2     John   NaN       50      65     82.0
3      Kim  90.0       92      90     95.0
4     Adam  72.0       62      80      NaN

可以看到,在备份原始数据后,使用dropna()函数将所有含有NaN值的行删除了。后续使用原始数据进行恢复,输出得到了最初的DataFrame,说明通过备份原始数据可以实现 dropna() 函数的可逆操作。

八、drop能接形容词吗

dropna()函数不能接形容词,因为pandas中的函数基本上都是按照固定参数规范定制的,与自然语言不同,只能使用已有的参数选项。可以根据实际需求设置阈值,使用 thresh参数,或在含有缺失值的数据的数量达到一定比例后再进行删除,使用 subset 参数。

# 创建带有缺失值的DataFrame
df = pd.DataFrame({'A': [1, 2, None, None],
                   'B': [None, 6, None, 8],
                   'C': [1, None, None, None]})

# 使用subset参数删除缺失值超过2个的行
df = df.dropna(subset=['A', 'B', 'C'], thresh=2)

print(df)

执行以上代码,输出结果如下:

     A    B    C
1  2.0  6.0  NaN

可以看到,由于C列仅含有一个完整数据,不足以满足 thresh=2的条件,因此被删除,仅剩下含有A和B列数据的1号行。

九、drop能加形容词吗

dropna()函数不能加形容词,但是可以使用 isin() 函数实现类似的功能。使用 isin() 后,可以支持过滤条件包含不等关系,例如小于、等于、大于等关系。

# 创建包含NaN值的DataFrame
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [np.nan, 6, np.nan, 8],
                   'C': [1, 2, np.nan, 4]})

# 使用isin()删除A列中大于等于3的行
df = df[~df['A'].isin([3, 4])]

print(df)

执行以上代码,输出结果如下:

     A    B    C
0  1.0  NaN  1.0
1  2.0  6.0  2.0
2  NaN  NaN  NaN

可以看到,由于制定了过滤条件“行中包含大于等于3的数”,因此被过滤掉的是A列中3和4,仅剩下完整数据的0号和1号行以及包含NaN的2号行。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/276091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-17 19:38
下一篇 2024-12-17 19:38

相关推荐

  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25

发表回复

登录后才能评论