Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新 | 您所在的位置:网站首页 › newspaper columns 有哪些 › Pandas.DataFrame.drop() 删除行或列 详解 含代码 含测试数据集 随Pandas版本持续更新 |
关于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. 示例:测试文件下载: 本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。 若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。 测试文件下载位置 例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 实验室设备网 版权所有 |