pandas drop删除指定条件的行

简介
在数据处理和分析中,我们经常需要删除DataFrame中满足某些条件的行。pandas是一种功能强大的数据分析工具,提供了丰富的方法来操作和处理数据。其中,drop方法是pandas中删除行或列的常用函数之一。本文将详细介绍如何使用pandas的drop方法删除指定条件的行。
1. pandas简介
pandas是一个强大的数据分析工具,提供了快速、灵活和表达力强大的数据结构,使得数据清洗、分析和可视化变得更加容易。其主要的数据结构是Series和DataFrame。
Series:pandas中的一维数据结构,类似于数组或列表。DataFrame:pandas中的二维数据结构,类似于表格或关系型数据库中的表。
DataFrame可以被看作是一种带有标签的Series,每一列是一个Series。在DataFrame中,每一行表示一个样本,每一列表示一个特征或字段。
2. pandas drop方法介绍
pandas中的drop方法用于删除指定的行或列。其函数签名如下:
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
labels:要删除的行索引或列索引。可以是单个索引或索引列表。axis:如果为0,则删除行;如果为1,则删除列。默认为0。index:要删除的行索引,可以是单个索引或索引列表。与labels参数功能相同,但在具体使用时只能选择其中之一。columns:要删除的列索引,可以是单个索引或索引列表。与labels参数功能相同,但在具体使用时只能选择其中之一。level:如果DataFrame具有多级索引,则通过level参数指定要删除的索引级别。inplace:如果为True,则在原地删除指定的行或列,不返回新的DataFrame。默认为False。errors:如果值为’raise’(默认),则在删除不存在的索引时引发异常;如果为’ignore’,则忽略。
3. drop删除指定条件的行
pandas中的drop方法可以通过指定条件来删除满足条件的行。下面通过示例代码来演示。
首先,导入pandas库,并创建一个包含学生信息的DataFrame:
import pandas as pd
data = {'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [20, 21, 22, 23],
'性别': ['男', '女', '男', '女']}
df = pd.DataFrame(data)
print(df)
运行结果如下:
姓名 年龄 性别
0 张三 20 男
1 李四 21 女
2 王五 22 男
3 赵六 23 女
上述代码创建了一个DataFrame,包含了学生的姓名、年龄和性别三列。现在我们需要删除年龄小于等于20岁的学生信息。可以通过以下方式实现:
df = df.drop(df[df['年龄'] <= 20].index)
print(df)
运行结果如下:
姓名 年龄 性别
1 李四 21 女
2 王五 22 男
3 赵六 23 女
上述代码中,df[df['年龄'] <= 20].index用于获取所有年龄小于等于20岁的学生的行索引,然后将这些行索引作为参数传递给drop方法,实现删除操作。最后,打印结果可以看到,所有年龄小于等于20岁的学生信息已被成功删除。
如果要删除满足多个条件的行,可以使用逻辑运算符&和|。例如,删除年龄小于等于20岁并且性别为男的学生信息:
df = df.drop(df[(df['年龄'] <= 20) & (df['性别'] == '男')].index)
print(df)
运行结果如下:
姓名 年龄 性别
1 李四 21 女
3 赵六 23 女
上述代码中,(df['年龄'] <= 20) & (df['性别'] == '男')用于获取所有年龄小于等于20岁并且性别为男的学生的行索引,然后将这些行索引作为参数传递给drop方法。
4. drop方法的注意事项
在使用drop方法时,需要注意以下几点:
4.1 返回新的DataFrame
drop方法默认情况下会返回一个新的DataFrame,原始的DataFrame不会受到影响。例如:
import pandas as pd
data = {'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [20, 21, 22, 23],
'性别': ['男', '女', '男', '女']}
df = pd.DataFrame(data)
new_df = df.drop(df[df['年龄'] <= 20].index)
print(df)
print(new_df)
运行结果如下:
姓名 年龄 性别
0 张三 20 男
1 李四 21 女
2 王五 22 男
3 赵六 23 女
结果显示,原始的DataFrame并未受到影响,而删除了年龄小于等于20岁的学生信息的新的DataFrame是一个独立的对象。
如果想要在原地删除指定的行或列,可以通过inplace参数设置为True。例如,在原地删除年龄小于等于20岁的学生信息:
df.drop(df[df['年龄'] <= 20].index, inplace=True)
print(df)
运行结果如下:
姓名 年龄 性别
1 李四 21 女
2 王五 22 男
3 赵六 23 女
结果显示,原始的DataFrame中的年龄小于等于20岁的学生信息已被成功删除。
极客教程