从Pandas DataFrame中删除一系列行
在数据处理中,我们常常需要从 DataFrame 中删除一些不需要的行,这些行可能是由于数据重复、有误或不可用而需要删除的。在 Pandas 中,我们可以使用 drop() 方法来删除行,但是需要指定删除哪些行,本篇文章将介绍几种不同的方法来删除一系列行。
更多Pandas相关文章,请阅读:Pandas 教程
删除连续的行
如果需要删除一连串的连续行,可以使用 drop() 方法,并传递一个范围,即可删除这些行。如下面的示例,我们需要删除 2-4 行的数据:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        'age': [25, 30, 35, 40, 45],
        'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
df.drop(index=range(2, 5), inplace=True)
print(df)
输出结果如下:
      name  age gender
0    Alice   25      F
1      Bob   30      M
4      Eva   45      F
在这里,drop() 方法中传递了一个范围 range(2, 5),表示需要删除 2-4 行的数据。inplace=True 表示需要对原 DataFrame 进行修改。
删除不连续的行
如果需要删除不连续的行,我们可以使用布尔索引的方式来实现。比如在下面的示例中,需要删除 name 列中等于 'Bob' 和 'David' 的所有行:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        'age': [25, 30, 35, 40, 45],
        'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
df = df.loc[(df['name'] != 'Bob') & (df['name'] != 'David')]
print(df)
输出结果如下:
      name  age gender
0    Alice   25      F
2  Charlie   35      M
4      Eva   45      F
在这里,df.loc[] 中传递了一个布尔值的判断条件,表示需要删除 name 列中等于 'Bob' 和 'David' 的所有行。
删除包含某些特征的行
或许有时候我们不知道需要删除哪些行,但是知道这些行包含了某些特征。在这种情况下,我们可以使用 Pandas 的 str.contains() 方法,它可以在 DataFrame 中搜索包含特定字符串的行。在下面的示例中,我们需要删除 name 列中包含 'l' 和 'v' 的所有行:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
        'age': [25, 30, 35, 40, 45],
        'gender': ['F', 'M', 'M', 'M', 'F']}
df = pd.DataFrame(data)
df = df[~df['name'].str.contains('l|v')]
print(df)
输出结果如下:
    name  age gender
1    Bob   30      M
3  David   40      M
在这里,我们使用了 ~df['name'].str.contains('l|v'),表示删除包含 'l' 和 'v' 的行。
删除空行
有时候 DataFrame 中会有一些空行,这些行不包含任何值。在 Pandas 中,空值用 NaN 表示。如果需要删除空行,可以使用 dropna() 方法,并传递 how='all' 参数。在下面的示例中,我们需要删除数据集中的空行:
import pandas as pd
import numpy as np
data = {'name':['Alice', 'Bob', 'Charlie', np.nan, 'Eva'],
        'age': [25, 30, 35, np.nan, 45],
        'gender': ['F', np.nan, 'M', 'M', 'F']}
df = pd.DataFrame(data)
df.dropna(how='all', inplace=True)
print(df)
输出结果如下:
      name   age gender
0    Alice  25.0      F
1      Bob  30.0    NaN
2  Charlie  35.0      M
4      Eva  45.0      F
在这里,dropna(how='all') 表示删除所有值都为空的行,inplace=True 表示需要对原 DataFrame 进行修改。
结论
在 Pandas 中,我们可以使用 drop() 方法和布尔索引的方式来删除 DataFrame 中不需要的行,可以使用 str.contain() 方法来删除包含某些特征的行。如果需要删除空行,可以使用 dropna() 方法,并传递 how='all' 参数。有了以上这些方法,我们可以很方便地从 DataFrame 中删除一系列行。
极客笔记