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:
然后,我们可以使用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:
示例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:
示例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:
示例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:
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:
然后,我们可以使用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:
示例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:
示例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函数。