从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 中删除一系列行。