Pandas drop删除DataFrame或Series中的指定行或列

Pandas drop删除DataFrame或Series中的指定行或列

参考:pandas drop

pandas的drop函数是一个非常有用的函数,它可以帮助我们删除DataFrame或Series中的指定行或列。在数据分析过程中,我们经常需要删除一些不需要的行或列,这时候就可以使用pandas的drop函数。

1. 基本用法

pandas的drop函数的基本语法如下:

DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')

参数说明:

  • labels:要删除的行或列的标签。
  • axis:删除行还是列。0或’index’表示删除行,1或’columns’表示删除列。
  • index:要删除的行标签。
  • columns:要删除的列标签。
  • level:用于多级索引。
  • inplace:是否在原地修改数据。如果为True,则在原DataFrame上进行修改,如果为False,则返回一个新的DataFrame。
  • errors:如果指定的标签不存在,如何处理。’raise’表示抛出错误,’ignore’表示忽略。

下面我们通过一些示例来详细介绍pandas的drop函数的用法。

示例1:删除行

首先,我们创建一个DataFrame。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

然后,我们可以使用drop函数删除指定的行。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

df.drop([1, 3])
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

示例2:删除列

我们也可以使用drop函数删除指定的列。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

df.drop('age', axis=1)
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

示例3:使用inplace参数

如果我们想在原地修改数据,可以使用inplace参数。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

df.drop('age', axis=1, inplace=True)
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

示例4:使用errors参数

如果我们尝试删除不存在的标签,会抛出错误。如果我们不想抛出错误,可以使用errors参数。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

df.drop('salary', axis=1, errors='ignore')
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

2. 多级索引

如果我们的DataFrame有多级索引,我们可以使用level参数来指定在哪一级删除标签。

首先,我们创建一个有多级索引的DataFrame。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

然后,我们可以使用drop函数删除指定级别的标签。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

df.drop(1, level=0)
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

示例5:删除多级索引的行

我们也可以删除多级索引的行。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

df.drop((1, 1))
print(df)

Output:

Pandas drop删除DataFrame或Series中的指定行或列

示例6:删除多级索引的列

如果我们的DataFrame有多级索引的列,我们也可以使用drop函数删除指定的列。

首先,我们创建一个有多级索引的列的DataFrame。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)
print(df)

然后,我们可以使用drop函数删除指定的列。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df.drop(('A', 'a'), axis=1)
print(df)

3. 删除缺失值

pandas的drop函数还可以用来删除含有缺失值的行或列。

首先,我们创建一个含有缺失值的DataFrame。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

print(df)

然后,我们可以使用drop函数删除含有缺失值的行。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna()
print(df)

我们也可以删除含有缺失值的列。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna(axis=1)
print(df)

示例7:删除含有缺失值的行

我们可以使用drop函数删除含有缺失值的行。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna()
print(df)

示例8:删除含有缺失值的列

我们也可以使用drop函数删除含有缺失值的列。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna(axis=1)
print(df)

示例9:使用how参数

dropna函数还有一个how参数,可以指定如何删除缺失值。’any’表示只要有缺失值就删除,’all’表示所有值都是缺失值才删除。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna(how='all')
print(df)

示例10:使用thresh参数

dropna函数还有一个thresh参数,可以指定至少有多少个非缺失值才保留。

import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [25, 32, 18, 21, 35],
    'city': ['New York', 'Los Angeles', 'San Francisco', 'Seattle', 'Austin']
}
df = pd.DataFrame(data)

index = pd.MultiIndex.from_tuples([(i, j) for i in range(5) for j in range(5)])
df = pd.DataFrame({'A': range(25)}, index=index)

columns = pd.MultiIndex.from_tuples([(i, j) for i in ['A', 'B', 'C'] for j in ['a', 'b', 'c']])
df = pd.DataFrame(np.random.rand(5, 9), columns=columns)

df = pd.DataFrame({
    'A': [1, 2, np.nan, 4, 5],
    'B': [np.nan, 2, 3, 4, 5],
    'C': [1, 2, 3, np.nan, 5],
    'D': [1, 2, 3, 4, np.nan]
})

df.dropna(thresh=3)
print(df)

4. 总结

pandas的drop函数是一个非常有用的函数,它可以帮助我们删除DataFrame或Series中的指定行或列。在数据分析过程中,我们经常需要删除一些不需要的行或列,这时候就可以使用pandas的drop函数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程