Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新 您所在的位置:网站首页 newspaper columns 有哪些 Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新

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

2024-06-02 11:21| 来源: 网络整理| 查看: 265

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

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

传送门: Pandas API参考目录

传送门: Pandas 版本更新及新特性

传送门: Pandas 由浅入深系列教程

本节目录 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-2list-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 bigsmallllamaspeed45.030.0weight200.0100.0length1.51.0cowspeed30.020.0weight250.0150.0length1.50.8falconspeed320.0250.0weight1.00.8length0.30.2

以删除 llama speed 这一行为例:

df.drop(("llama", "speed")) bigsmallllamaweight200.0100.0length1.51.0cowspeed30.020.0weight250.0150.0length1.50.8falconspeed320.0250.0weight1.00.8length0.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-41 层列名1-11-21-21-42 层列名(底层)2-12-22-32-40 层行索引(顶层)1 层行索引(底层)AX-0.612242-1.3863091.200706-0.435893Y2.912622-0.4443680.3409081.159878BX0.553297-0.003906-0.944363-0.515691Y0.482624-0.488962-0.112784-0.366956

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

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有