DataFrame如何删除数据?如何drop一行或一列数据?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
继续聊一聊pandas
的DataFrame
的用法,本文中说一说dataframe
删除数据的几种方式。dataframe
里面如何删除一列数据?如何删除一行数据?这些都是本文中要讨论的话题。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的事情。dataframe
的数据,有几种删除的方法?“茴香豆的茴字有几种写法?”本文散发着一点点酸腐的气息。本文测试环境:python@3.6.8
,pandas@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=False
,inplace
默认为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
的删除数据的方式似乎有点多,虽然每个函数都有它存在的理由,不过这里苏南大叔觉得这些函数太多了。头晕。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。