第二章:25+ Python 数据操作教程(第八节如何从 PANDAS DATAFRAME 中删除一列或多列)

在本教程中,我们将介绍如何从 pandas 数据框中删除或删除一个或多个列。

是一个用于数据操作的 python 包。它具有以下数据任务的几个功能:

目录

在 python 中删除一列

在 Python 中删除多列

如何从 pandas Dataframe 中按位置编号删除列?

按名称模式删除列

删除名称以字母“X”开头的列

删除缺失值百分比大于 50% 的列


  1. 导入或加载 Pandas 库

要使用任何 python 库,我们首先需要使用import命令加载它们。

import pandas as pd
import numpy as np
让我们创建一个假的数据框来说明

下面的代码创建了 4 列,名称为 A 到 D。

df = pd.DataFrame(np.random.randn(6, 4), columns=list('ABCD'))
          A         B         C         D
0 -1.236438 -1.656038  1.655995 -1.413243
1  0.507747  0.710933 -1.335381  0.832619
2  0.280036 -0.411327  0.098119  0.768447
3  0.858730 -0.093217  1.077528  0.196891
4 -0.905991  0.302687  0.125881 -0.665159
5 -2.012745 -0.692847 -1.463154 -0.707779

在 python 中删除一列

在熊猫中,drop( )函数用于删除列。axis=1告诉 Python 你想在列而不是行上应用函数。

df.drop(['A'], axis=1)

A 列已被删除。请参阅下面显示的输出。

          B         C         D
0 -1.656038  1.655995 -1.413243
1  0.710933 -1.335381  0.832619
2 -0.411327  0.098119  0.768447
3 -0.093217  1.077528  0.196891
4  0.302687  0.125881 -0.665159
5 -0.692847 -1.463154 -0.707779

为了创建一个新的数据框 newdf来存储剩余的列,您可以使用下面的命令。

newdf = df.drop(['A'], axis=1)

要从原始数据框中永久删除该列df,您可以使用该选项inplace=True

df.drop(['A'], axis=1, inplace=True)
#Check columns in df after dropping column A
df.columns

Output
Index(['B', 'C', 'D'], dtype='object')
该参数inplace=将来可能会被弃用(删除),这意味着您可能看不到它在即将发布的 pandas 包中起作用。如果您不习惯使用此参数,则应避免使用它。相反,您可以在删除新数据框中的列后存储数据(如上一节所述)。

如果你想改变现有的数据框,试试这个 
df = df.drop(['A'], axis=1)

在 Python 中删除多列

您可以在列表中指定要删除的所有列并将其传递给drop( )函数。

方法一

df2 = df.drop(['B','C'], axis=1)

方法二

cols = ['B','C']
df2 = df.drop(cols, axis=1)
选择或保留列

如果你想选择一列(而不是删除),你可以使用命令

df['A']

要选择多个列,您可以提交以下代码。

df[['A','B']]

如何从 pandas Dataframe 中按位置编号删除列?

您可以使用此命令 找出第一列df.columns[0]的名称。python 中的索引从 0 开始。

df.drop(df.columns[0], axis =1)

要按位置(第一列和第三列)删除多列,您可以在列表中指定位置[0,2]

cols = [0,2]
df.drop(df.columns[cols], axis =1)

按名称模式删除列

df = pd.DataFrame({"X1":range(1,6),"X_2":range(2,7),"YX":range(3,8),"Y_1":range(2,7),"Z":range(5,10)})
   X1  X_2  YX  Y_1  Z
0   1    2   3    2  5
1   2    3   4    3  6
2   3    4   5    4  7
3   4    5   6    5  8
4   5    6   7    6  9

删除名称以字母“X”开头的列

df.loc[:,~df.columns.str.contains('^X')]

怎么运行的?

  1. ^X是正则表达式语言的表达式,指的是字母“X”的开头
  2. df.columns.str.contains('^X')返回数组 [True, True, False, False, False]。
    条件满足时为真。否则为假
  3. Sign~表示否定条件。
  4. df.loc[ ]用于选择列

也可以这样写:

df.drop(df.columns[df.columns.str.contains('^X')], axis=1)

其他例子

#删除名称中包含字符串 'X' 的列
df.loc[:,~df.columns.str.contains('X')] 

#删除名称中包含字符串 'X' 或 'Y' 的列
df.loc[: ,~df.columns.str.contains('X|Y')] 

#删除名称以字符串'X'结尾的列
df.loc[:,~df.columns.str.contains('X$')]
#Removing columns whose name contains string 'X'
df.loc[:,~df.columns.str.contains('X')]

#Removing columns whose name contains string either 'X' or 'Y'
df.loc[:,~df.columns.str.contains('X|Y')]

#Removing columns whose name ends with string 'X'
df.loc[:,~df.columns.str.contains('X$')]

删除缺失值百分比大于 50% 的列

df = pd.DataFrame({'A':[1,3,np.nan,5,np.nan],
                   'B':[4,np.nan,np.nan,5,np.nan]
                   })

可以通过每列中的 NA 计算缺失值的百分比。

cols = df.columns[df.isnull().mean()>0.5]
df.drop(cols, axis=1)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值