在本教程中,我们将介绍如何从 pandas 数据框中删除或删除一个或多个列。
是一个用于数据操作的 python 包。它具有以下数据任务的几个功能:
目录
在 python 中删除一列
在 Python 中删除多列
如何从 pandas Dataframe 中按位置编号删除列?
按名称模式删除列
删除名称以字母“X”开头的列
删除缺失值百分比大于 50% 的列
-
导入或加载 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')]
怎么运行的?
^X
是正则表达式语言的表达式,指的是字母“X”的开头df.columns.str.contains('^X')
返回数组 [True, True, False, False, False]。
条件满足时为真。否则为假- Sign
~
表示否定条件。 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)