Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新

news2024/11/24 11:52:16

关于Pandas版本: 本文基于 pandas2.1.2 编写。

关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。

Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。

Pandas API参考所有内容目录

本节目录

  • Pandas.DataFrame.drop()
    • 语法:
    • 返回值:
    • 参数说明:
      • labels 指定要删除行或列
      • axis 指定删除方向(行或列)
      • index & columns 定向删除行或列
      • level 指定多层索引层级
      • inplace 原地生效(是否在原始数据里直接修改)
      • errors 原地生效(是否在原始数据里直接修改)
    • Raises:
    • 相关方法:
    • 示例:
      • 例1:删除单个或多个行、列,`labels` 参数的传参方法
      • 例2:使用 `index` `columns` 参数,可以实现同时对行和列进行删除:
      • 例3:使用 `level`参数,可以实现同时删除多个目标

Pandas.DataFrame.drop()

Pandas.DataFrame.drop 用于删除行或列。

  • 使用列名(labels)删除列;
  • 使用行索引(index) 删除行。

语法:

DataFrame.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)

返回值:

  • DataFrame or None

    返回值是一个新的 DataFrame,其中删除了指定的行或列,或者如果 inplace=True 则返回 None

参数说明:

labels 指定要删除行或列

  • labels : *single label or list-like 例1

    labels 参数用于指定要删除的列,或要删除的行:

    • single label: 删除单行或列,就使用单个列名或索引; 例1-2
    • list-like: 删除多行或多列,就使用类似列表,传递多个行索引或列名构成的类似列表。例1-3

    ⚠️ 注意 :

    元组(tuble) 不再被理解为 list-like ,因为它有特殊用途,多层索引,需要用元组传递行索引或列名!例1-4

axis 指定删除方向(行或列)

  • axis : {0 or ‘index’, 1 or ‘columns’}, default 0

    axis 参数用于指定删除行,或是删除列:

    • 0 或 ‘index’ : 删除行;
    • 1 or ‘columns’: 删除列。

index & columns 定向删除行或列

  • index : single label or list-like

  • columns : single label or list-like

    index 参数,用于指定要删除的行。 (index=labels 等效于 labels, axis=0)。

    columns 参数,用于指定要删除的列。(columns=labels 等效于 labels, axis=1)。

    index 参数和 columns 参数主要用于同时删除行、列的情况。例2

    • single label: 删除单行或列,就使用单个列名或索引;
    • list-like: 删除多行或多列,就使用类似列表,传递多个行索引或列名构成的类似列表。

    ⚠️ 注意 :

    元组(tuble) 不再被理解为 list-like ,因为它有特殊用途,多层索引,需要用元组传递行索引或列名!

    index 参数 columns 参数 二者均不能和axis参数混用

level 指定多层索引层级

  • level : int or level name, optional

    level 参数用于指定多层索引的层级。例3

    • int: 层级的整数编号;
    • level name: 层级名称。

    ⚠️ 注意 :

    这个参数,旨在弥补当有多层索引时 labels 参数传递元组会很麻烦尴尬。例3-1

    如果指定的层级里,labels 参数指定的列名或索引出现了多次,所有匹配的都会被删除。

多层索引的名字和层级编号

多层索引的名字和层级编号

inplace 原地生效(是否在原始数据里直接修改)

  • inplace : bool, default False

    inplace 参数用于指定是否在原数据里直接删除行或列,默认 inplace=False

    • True : 在原数据里直接修改,并返回 None
    • False: 创建一个数据副本,并在此副本里删除行或列,不会影响原数据。

errors 原地生效(是否在原始数据里直接修改)

  • errors : {‘ignore’, ‘raise’}, default ‘raise’

    errors 参数用于控制当发生错误时,是否报告错误内容,默认 errors= ‘raise’ 表示会中止当前操作并报告错误内容。:

    • ‘ignore’: 忽略,不报告错误;
    • ‘raise’: 停止操作,并报告错误内容。

Raises:

如果没有找到你传递的行索引、列名,会停中止当前操作,并引发 KeyError

相关方法:

➡️ 相关方法


  • DataFrame.loc

    筛选数据-标签法

  • DataFrame.dropna

    Return DataFrame with labels on given axis omitted where (all or any) data are missing.

  • DataFrame.drop_duplicates

    Return DataFrame with duplicate rows removed, optionally only considering certain columns.

  • Series.drop

    Return Series with specified index labels removed.

示例:

测试文件下载:

本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。

若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。

测试文件下载位置.png

测试文件下载位置

例1:删除单个或多个行、列,labels 参数的传参方法

  • 例1-1、构建演示数据,并观察
import pandas as pd

# 构建演示数据
idx = pd.Index(["一", "二", "三"], name="行索引 ↓")
idx_labels = pd.Index(["A", "B", "C"], name="列名 →")
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, index=idx, columns=idx_labels)

# 观察演示数据
df
列名 →ABC
行索引 ↓
123
456
789

  • 例1-2、删除单个行、列

删除单个行,就指定单个行索引,删除单个列,就指定单个列名。注意,axis 参数会影响删除方向,默认 axis=0 表示删除行:

# 删除单个行
df.drop("一")
# ...   列名 →	A	B	C
# ... 行索引 ↓
# ...      二	4	5	6
# ...      三	7	8	9


# 删除单个列,注意修改axis参数
df.drop("A", axis=1)
# ...   列名 →	B	C
# ... 行索引 ↓
# ...      一	2	3
# ...      二	5	6
# ...      三	8	9

  • 例1-3、删除多个行、多个列,可以用类似列表传递多个行索引、或多个列名。
# 删除多个行
df.drop(["一", "二"])
# ...   列名 →	A	B	C
# ... 行索引 ↓
# ...      三	7	8	9

# 删除多个列
# df.drop(["A", "B"], axis=1)
# ...   列名 →	C
# ... 行索引 ↓
# ...      一	3
# ...      二	6
# ...      三	9

  • 例1-4、多层索引删除行、列,需要传递从最顶层到最底层索引行索引或列名 构成的 元组

先构建一个多层索引的 DataFrame:

midx = pd.MultiIndex(
    levels=[["llama", "cow", "falcon"], ["speed", "weight", "length"]],
    codes=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]],
)
df = pd.DataFrame(
    index=midx,
    columns=["big", "small"],
    data=[
        [45, 30],
        [200, 100],
        [1.5, 1],
        [30, 20],
        [250, 150],
        [1.5, 0.8],
        [320, 250],
        [1, 0.8],
        [0.3, 0.2],
    ],
)
df
bigsmall
llamaspeed45.030.0
weight200.0100.0
length1.51.0
cowspeed30.020.0
weight250.0150.0
length1.50.8
falconspeed320.0250.0
weight1.00.8
length0.30.2

以删除 llama speed 这一行为例:

df.drop(("llama", "speed"))
bigsmall
llamaweight200.0100.0
length1.51.0
cowspeed30.020.0
weight250.0150.0
length1.50.8
falconspeed320.0250.0
weight1.00.8
length0.30.2
import pandas as pd

# 构建演示数据
idx = pd.Index(["一", "二", "三"], name="行索引 ↓")
idx_labels = pd.Index(["A", "B", "C"], name="列名 →")
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, index=idx, columns=idx_labels)

# 观察演示数据
df.drop(index="一", axis=1)
列名 →ABC
行索引 ↓
456
789

例2:使用 index columns 参数,可以实现同时对行和列进行删除:

import pandas as pd

# 构建演示数据
idx = pd.Index(["一", "二", "三"], name="行索引 ↓")
idx_labels = pd.Index(["A", "B", "C"], name="列名 →")
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, index=idx, columns=idx_labels)

# 同时删除 行二,B列和C列
df.drop(index="二", columns=["B", "C"])
列名 →A
行索引 ↓
1
7

例3:使用 level参数,可以实现同时删除多个目标

  • 例3-1、构建演示数据
import numpy as np
import pandas as pd

# 创建示例数据
data = np.random.randn(4, 4)
rows = pd.MultiIndex.from_product(
    [["A", "B"], ["X", "Y"]], names=["0 层行索引(顶层)", "1 层行索引(底层)"]
)
columns1 = pd.MultiIndex.from_tuples(
    [
        ("0-1", "1-1", "2-1"),
        ("0-2", "1-2", "2-2"),
        ("0-3", "1-2", "2-3"),
        ("0-4", "1-4", "2-4"),
    ],
    names=["0 层列名(顶层)", "1 层列名", "2 层列名(底层)"],
)


# 创建 DataFrame
df = pd.DataFrame(data, index=rows, columns=columns1)

# 打印 DataFrame
df
0 层列名(顶层)0-10-20-30-4
1 层列名1-11-21-21-4
2 层列名(底层)2-12-22-32-4
0 层行索引(顶层)1 层行索引(底层)
AX-0.612242-1.3863091.200706-0.435893
Y2.912622-0.4443680.3409081.159878
BX0.553297-0.003906-0.944363-0.515691
Y0.482624-0.488962-0.112784-0.366956

  • 例3-2、删除索引为X的如果使用元组传递给 labelsindex 参数,都会很麻烦,例如我要删除 1层 索引所有是 X 的行:
df.drop(index=[("A", "X"), ("B", "X")])  # 等效于df.drop(labels=[('A','X'),('B','X')], axis=0)
0 层列名(顶层)0-10-20-30-4
1 层列名1-11-21-21-4
2 层列名(底层)2-12-22-32-4
0 层行索引(顶层)1 层行索引(底层)
AY2.912622-0.4443680.3409081.159878
BY0.482624-0.488962-0.112784-0.366956

  • 例3-3、使用 level参数,可以实现同时删除 1层 索引所有是 X 的行,就很方便:
df.drop(index='X',level=1)
0 层列名(顶层)0-10-20-30-4
1 层列名1-11-21-21-4
2 层列名(底层)2-12-22-32-4
0 层行索引(顶层)1 层行索引(底层)
AY2.912622-0.4443680.3409081.159878
BY0.482624-0.488962-0.112784-0.366956

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web3.0基本概念简析

web3.0概念简析 web3.0的发展史 web1.0 仅用于展示,无法进行点赞评论等交互 web2.0 不仅可以展示,还可以上传视频、图片等,用户可以参与创作内容并获取收益。但还是中心化的模型 缺点 1 机械化的人机验证 2 账户安全无法保证 多年未登陆…

Mechanics 1-Mechanics Toolkit(课件-编辑中)

1.1 Quantities,Units&Modelling 1.1.1 Scalars(标量) & Vectors(矢量) Scalars: 跑步速度5m/s 实际应用中为什么要引入Vector? 这个数据如果在导弹拦截中够用吗? 除了速率(Speed),还需要发射方向(direction) 因此用Spe…

[C++] opencv - Mat::convertTo函数介绍和使用场景

Mat::convertTo()函数 Converts an array to another data type with optional scaling. 该函数主要用于数据类型的相互转换。 The method converts source pixel values to the target data type. saturate_cast<> is applied at the end to avoid possible overf…

安装Sql2012提示:需要更新以前的Visual Studio 2010 实例

解决方案&#xff1a;先卸载visual studio 2010 ,安装SQL2012

net 8.0 + mysql 数据库的应用与实现

首先引入nutget包 第二步根目录创建一个文件夹名字自取&#xff0c;再建一个SqlContent类 using Microsoft.EntityFrameworkCore; using System.Data.Entity; using DbContext Microsoft.EntityFrameworkCore.DbContext;namespace YuanFuTouBao2022Core.Dao {public class Sql…

C语言位域定义与使用

参考文章&#xff1a; 【C语言】详解位域定义与使用_c 语言定义位-CSDN博客 代码有修改&#xff0c;主要是变量初始化&#xff0c;原程序可能相应内存不能写。且第二个字节F不好区分各位。 #include <stdio.h>typedef struct {unsigned short b1 : 1;unsigned short b…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK和短曝光功能的技术背景Baumer工业相机通过NEOAPI SDK使用相机日志跟踪功能1.引用合适的类文件2.通过NEOAPI SDK使用相机日志跟踪功能3.通…

群晖NAS搭建WebDav结合内网穿透实现公网访问本地影视资源

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SAP 中的外部接口:预扣税

文章目录 1 Introduction2 implementation3 Summary 1 Introduction We use BP create WTAX_TYPE ,I don’t find a bapi. We will update for it . We will impement WTax type , WTax code ,Subject in the ‘BP’. 2 implementation UPDATE lfbw SET witht gs_alv-wit…

FreeRTOS学习第7篇--周期性延迟和相对性延迟函数

目录 FreeRTOS学习第7篇--周期性延迟和相对性延迟函数时间延迟vTaskDelay函数原型vTaskDelayUntil函数原型PrintTask_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第7篇–周期性延迟和相对性延迟函数 本文目标&#xff1a;学习与使用FreeRTOS中的延迟函数&…

YOLOv8改进 | Conv篇 | 在线重参数化卷积OREPA助力二次创新(提高推理速度 + FPS)

一、本文介绍 本文给大家带来的改进机制是一种重参数化的卷积模块OREPA,这种重参数化模块非常适合用于二次创新,我们可以将其替换网络中的其它卷积模块可以不影响推理速度的同时让模型学习到更多的特征。OREPA是通过在线卷积重参数化(Online Convolutional Re-parameteriza…

基于Java+SSM技术的宠物领养系统设计与实现【附源码】

基于JavaSSM技术的宠物领养系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种定制系统 …

架设一台NFS服务器,并按照以下要求配置

1、开放/nfs/shared目录&#xff0c;供所有用户查询资料 2、开放/nfs/upload目录&#xff0c;为192.168.xxx.0/24网段主机可以上传目录&#xff0c; 并将所有用户及所属的组映射为nfs-upload,其UID和GID均为210 3、将/home/tom目录仅共享给192.168.xxx.xxx这台主机&#xff0c;…

【嘉立创EDA-PCB设计指南】2.详解BOM表+C0603封装绘制流程+元件封装其它注意点总结+原理图转到PCB流程

前言&#xff1a;本文详解BOM表C0603封装绘制流程元件封装其它注意点总结原理图转到PCB流程。最终会实现如下图所示的PCB初态。对于封装绘制的流程是一样的&#xff0c;所以只在第2章节对C0603进行详细的封装流程描述&#xff0c;对该PCB的其它元件在第3章节-元件封装的其它注意…

Windows如何安装VNC+Viewer+cpolar实现远程Ubuntu桌面?

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

基于springboot+vue的图书个性化推荐系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

STL中的stack、queue以及deque

目录 一、关于deque容器&#xff08;双端队列&#xff09; 1、deque的底层实现 2、deque的缺点 3、关于stack与squeue默认使用deque容器 二、stack简介 1、stack的成员函数&#xff08;接口&#xff09; 2、stack的模拟实现 三、queue简介 1、queue的成员函数&#xff08…

生产环境LVM磁盘扩容

使用df -Th 命令查看磁盘信息 ,可以看到当前LVM逻辑卷容量是38G [rootZ ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 38G 2.4G 36G 7% / devtmpfs devtmpfs 1.1G 0 1.1G …

「sdkman」「nvm」Linux:基于sdkman安装多版本Java;安装maven;基于nvm安装多版本nodejs;安装yarn

1. 基于sdkman 安装多版本Java Linux环境下管理多版本java可以使用sdkman,官网: https://sdkman.io/ 需要注意sdkman 依赖 zip和unzip 命令,记得提前下载再下载sdkman 安装命令按官网走也很简单: curl -s “https://get.sdkman.io” | bash source “$HOME/.sdkman/bin/sdkm…

软件测试|使用matplotlib绘制箱型图

简介 绘制箱型图&#xff08;Box Plot&#xff09;是一种常用于可视化数据分布的方法&#xff0c;它可以显示数据的中位数、四分位数、异常值等统计信息。Matplotlib 是一个强大的 Python 数据可视化库&#xff0c;可以轻松绘制箱型图。在本文中&#xff0c;我们将介绍如何使用…