我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

继续聊一聊pandasDataFrame的用法,本文中说一说dataframe删除数据的几种方式。dataframe里面如何删除一列数据?如何删除一行数据?这些都是本文中要讨论的话题。

苏南大叔:DataFrame如何删除数据?如何drop一行或一列数据? - pandas-dataframe-drop
DataFrame如何删除数据?如何drop一行或一列数据?(图1-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的事情。dataframe的数据,有几种删除的方法?“茴香豆的茴字有几种写法?”本文散发着一点点酸腐的气息。本文测试环境:python@3.6.8pandas@1.1.5

基本定义

这里先定义个dataframe数据,然后copy一个作为备份。

import pandas as pd
from pandas import Series, DataFrame
df = DataFrame([
        ('虎子', 5, "dog", "5kg", True),
        ('老许', 3, "bird", "3kg", True),
        ('二赖子', 6, "fish", "6kg", True),
        ('老白', 8, "catty", "5kg", True),
        ('小黑', 10, "puppy", "2kg", True),
    ],
    columns=('name', 'age', 'class', 'weight', 'good')
)
# df_copy = df.copy()
注意:在python中,使用=进行赋值操作的话,两者指向同一个位置。一个变另外一个也变。必须使用.copy()才能正确操作。

关于pandas定义一个新的dataframe的几种方式,下面的文章里面有介绍文字:

奇怪的参数

下面的操作中,会有个很奇怪的隐藏参数inplace,有两种情况:

  • inplace=Falseinplace默认为False,意思是不改变原数据。改变后的数据会被返回。
  • inplace=True,这种情况下,没有返回值。直接修改原数据。

另外有一个labels的概念:

  • axis=1的时候,labels指的就是columns【注意这里有个s】。
  • axis=0的时候,labels指的就是index【注意这里没有s】。

删除一列数据

删除一列数据的方式,有哪些呢?

方式一del

这个方式非常简单直观,直接就是删除一列数据,最简单暴露推荐。例如:

del df['good']

测试代码:

del df['good']
print(df)
  name  age  class weight
0   虎子    5    dog    5kg
1   老许    3   bird    3kg
2  二赖子    6   fish    6kg
3   老白    8  catty    5kg
4   小黑   10  puppy    2kg

方式二.pop()

这种方式,虽然也是可以删除一列数据,但是在del的效果之上,函数还获得了被删除的这一列数据。例如:

_series = df.pop("good")

这里的pop()不考虑先入先出的情况,想删除那列数据就直接指定名字就可以。一次只能对一个数据帧进行操作。
测试代码:

a = df.pop('weight')
print(a)
0    5kg
1    3kg
2    6kg
3    5kg
4    2kg
Name: weight, dtype: object

方式三.drop('',axis=1)

对于列名,可以传递数组,也可以是字符串。数组的话,就可以传递多个列名。

df2 = df.drop('age',axis=1)
df2 = df.drop(['age'],axis=1)
df2 = df.drop(['age', 'class'],axis=1)
df.drop('age',axis=1,inplace=True)
df.drop(['age'],axis=1,inplace=True)
df.drop(['age', 'class'],axis=1,inplace=True)

测试代码:

df2 = df.drop('class',axis=1,inplace=False)
print(df)
print(df2)
  name  age  class weight  good
0   虎子    5    dog    5kg  True
1   老许    3   bird    3kg  True
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age weight  good
0   虎子    5    5kg  True
1   老许    3    3kg  True
2  二赖子    6    6kg  True
3   老白    8    5kg  True
4   小黑   10    2kg  True

测试代码:

df3 = df.drop('class',axis=1,inplace=True)
print(df)
print(df3)
  name  age weight  good
0   虎子    5    5kg  True
1   老许    3    3kg  True
2  二赖子    6    6kg  True
3   老白    8    5kg  True
4   小黑   10    2kg  True
None

方式四.drop(columns=[])

axis=1的意思就是columns,意思是删除一列数据。这里,同样存在inplace的问题。

df2 = df.drop(columns=['weight'])
df2 = df.drop(columns=['weight', 'good'])
df2 = df.drop(columns=['weight', 'good'])
df.drop(columns=['weight'], inplace=True)
df.drop(columns=['weight', 'good'], inplace=True)
df.drop(columns=['weight', 'good'], inplace=True)

测试代码:

bb = df.drop(columns=['weight', 'good'])
print(df)
print(bb)
  name  age  class weight  good
0   虎子    5    dog    5kg  True
1   老许    3   bird    3kg  True
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age  class
0   虎子    5    dog
1   老许    3   bird
2  二赖子    6   fish
3   老白    8  catty
4   小黑   10  puppy

方式五.drop(labels=[],axis=1)

df2 = df.drop(columns=["name"])
df2 = df.drop(["name"], axis=1)
df2 = df.drop(labels=["name"], axis=1)

输出都是:

   age  class weight  good
0    5    dog    5kg  True
1    3   bird    3kg  True
2    6   fish    6kg  True
3    8  catty    5kg  True
4   10  puppy    2kg  True

删除一行数据

删除一行数据的方式有些简单了,没有删除一列数据的时候那么复杂。有下面几种形式:

df2 = df.drop(0)
df2 = df.drop([0,1,2,3])
df2 = df.drop(index=[0,1,2,3])
df2 = df.drop(labels=range(0, 4), axis=0))
df2 = df.drop(labels=[0,1,2,3], axis=0))
df.drop(0, inplace=True)
df.drop([0,1,2,3], inplace=True)
df.drop(index=[0,1,2,3], inplace=True)
df.drop(labels=range(0, 4), axis=0, inplace=True)
df.drop(labels=[0,1,2,3], axis=0, inplace=True)

测试代码:

print(df)
df2 = df.drop(1)
df3 = df.drop([0, 1])
print(df2)
print(df3)
  name  age  class weight  good
0   虎子    5    dog    5kg  True
1   老许    3   bird    3kg  True
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age  class weight  good
0   虎子    5    dog    5kg  True
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age  class weight  good
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True

测试代码2:

df4 = df.drop(index=[0, 1], inplace=True)
print(df)
print(df4)
  name  age  class weight  good
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
None

测试代码3:

print(df.drop(labels = 1, axis = 0))
print(df.drop(labels = [1,2], axis = 0))
print(df.drop(labels = range(1,3), axis = 0))

输出值为:

  name  age  class weight  good
0   虎子    5    dog    5kg  True
2  二赖子    6   fish    6kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age  class weight  good
0   虎子    5    dog    5kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True
  name  age  class weight  good
0   虎子    5    dog    5kg  True
3   老白    8  catty    5kg  True
4   小黑   10  puppy    2kg  True

参考文献

总结

dataframe的删除数据的方式似乎有点多,虽然每个函数都有它存在的理由,不过这里苏南大叔觉得这些函数太多了。头晕。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   pandas