目录
- DataFrame指定的行删除
- 按行名指定(行标签)
- 按行号指定
- 未设置行名的注意事项
- DataFrame指定的列删除
- 按列名指定(列标签)
- 按列号指定
- 多行多列的删除
使用drop()方法删除pandas.DataFrame的行和列。
在0.21.0版之前,请使用参数labels和axis指定行和列。从0.21.0开始,可以使用index或columns。
在此,将对以下内容进行说明。
- DataFrame指定的行删除- 按行名指定(行标签)
- 按行号指定
- 未设置行名的注意事项
 
- DataFrame指定的列删除- 按列名指定(列标签)
- 按列号指定
 
- 多行多列的删除
删除缺失值NaN和删除具有重复元素的行,请参考文章。
Pandas删除,替换并提取其中的缺失值NaN(dropna,fillna,isnull)
以下数据用作示例代码中的示例。
import pandas as pd
df = pd.read_csv('./data/12/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57
DataFrame指定的行删除
按行名指定(行标签)
它由第一个参数labels和第二个参数axis指定。行指定axis= 0。
print(df.drop('Charlie', axis=0))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57
默认值为axis = 0,因此可以省略axis。
print(df.drop('Charlie'))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57
从0.21.0或更高版本开始,它也可以由参数索引指定。
print(df.drop(index='Charlie')) # age state point # name # Alice 24 NY 64 # Bob 42 CA 92 # Dave 68 TX 70 # Ellen 24 CA 88 # Frank 30 NY 57
如果要一次删除多行,请在列表中指定。
print(df.drop(['Bob', 'Dave', 'Frank'])) # age state point # name # Alice 24 NY 64 # Charlie 18 CA 70 # Ellen 24 CA 88 print(df.drop(index=['Bob', 'Dave', 'Frank'])) # age state point # name # Alice 24 NY 64 # Charlie 18 CA 70 # Ellen 24 CA 88
默认情况下,原始DataFrame保持不变,并返回一个新的DataFrame。如果参数inplace设置为True,则将更改原始DataFrame。在这种情况下,不会返回任何新的DataFrame,并且返回值为None。
按行号指定
如果要按行号指定,请使用DataFrame的index属性。
如果在index属性的[]中指定行号,则可以获得相应的行名。可以在列表中指定多个行号。
print(df.index[[1, 3, 5]]) # Index(['Bob', 'Dave', 'Frank'], dtype='object', name='name')
在drop()第一个的参数中指定labels或index的名称。
print(df.drop(df.index[[1, 3, 5]])) # age state point # name # Alice 24 NY 64 # Charlie 18 CA 70 # Ellen 24 CA 88 print(df.drop(index=df.index[[1, 3, 5]])) # age state point # name # Alice 24 NY 64 # Charlie 18 CA 70 # Ellen 24 CA 88
未设置行名的注意事项
如果未设置行名,则index默认为整数序号。当使用数字值而不是这样的字符串作为索引时要小心。
df_noindex = pd.read_csv('./data/12/sample_pandas_normal.csv')
print(df_noindex)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57
print(df_noindex.index)
# RangeIndex(start=0, stop=6, step=1)
如果是序列号,则无论原样指定数字值还是使用index属性,结果都将相同。
print(df_noindex.drop([1, 3, 5])) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88 print(df_noindex.drop(df_noindex.index[[1, 3, 5]])) # name age state point # 0 Alice 24 NY 64 # 2 Charlie 18 CA 70 # 4 Ellen 24 CA 88
如果由于排序原因其不是序列号,结果将有所不同。当直接指定数字值时,将删除行标签为该数字值的行,而当使用index属性时,将删除其行号为该数字值的行。
df_noindex_sort = df_noindex.sort_values('state')
print(df_noindex_sort)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70
print(df_noindex_sort.index)
# Int64Index([1, 2, 4, 0, 5, 3], dtype='int64')
print(df_noindex_sort.drop([1, 3, 5]))
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
print(df_noindex_sort.drop(df_noindex_sort.index[[1, 3, 5]]))
#     name  age state  point
# 1    Bob   42    CA     92
# 4  Ellen   24    CA     88
# 5  Frank   30    NY     57
DataFrame指定的列删除
按列名指定(列标签)
它由第一个参数labels和第二个参数axis指定。列指定axis= 1。
print(df.drop('state', axis=1))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57
从0.21.0或更高版本开始,可以使用参数列指定它。
print(df.drop(columns='state')) # age point # name # Alice 24 64 # Bob 42 92 # Charlie 18 70 # Dave 68 70 # Ellen 24 88 # Frank 30 57
如果要一次删除多个列,请在列表中指定。
print(df.drop(['state', 'point'], axis=1)) # age # name # Alice 24 # Bob 42 # Charlie 18 # Dave 68 # Ellen 24 # Frank 30 print(df.drop(columns=['state', 'point'])) # age # name # Alice 24 # Bob 42 # Charlie 18 # Dave 68 # Ellen 24 # Frank 30
参数inplace的使用方法与行的相同。
df_org = df.copy() df_org.drop(columns=['state', 'point'], inplace=True) print(df_org) # age # name # Alice 24 # Bob 42 # Charlie 18 # Dave 68 # Ellen 24 # Frank 30
按列号指定
如果要按列号指定,请使用DataFrame的columns属性。
print(df.columns[[1, 2]]) # Index(['state', 'point'], dtype='object') print(df.drop(df.columns[[1, 2]], axis=1)) # age # name # Alice 24 # Bob 42 # Charlie 18 # Dave 68 # Ellen 24 # Frank 30 print(df.drop(columns=df.columns[[1, 2]])) # age # name # Alice 24 # Bob 42 # Charlie 18 # Dave 68 # Ellen 24 # Frank 30
如果columns是整数值,请小心上述行。
多行多列的删除
从0.21.0及更高版本开始,可以通过同时指定参数index和column来删除多行/多列。
当然,也可以通过行号/列号指定,和使用参数inplace。
print(df.drop(index=['Bob', 'Dave', 'Frank'], columns=['state', 'point'])) # age # name # Alice 24 # Charlie 18 # Ellen 24 print(df.drop(index=df.index[[1, 3, 5]], columns=df.columns[[1, 2]])) # age # name # Alice 24 # Charlie 18 # Ellen 24
到此这篇关于Pandas.DataFrame删除指定行和列(drop)的实现的文章就介绍到这了,更多相关Pandas DataFrame删除指定行列内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!
