如何在pandas中删除列
在数据分析过程中,我们经常需要对数据进行清洗和预处理。其中,删除不必要的列是一个常见的操作。在Python的pandas库中,我们可以使用drop
方法来删除DataFrame中的列。本文将详细介绍如何在pandas中删除列,并提供一些示例代码。
1. 基本用法
在pandas中,drop
方法可以用来删除DataFrame中的行或列。其基本语法如下:
DataFrame.drop(labels=None, axis=0, index=None, columns=None, inplace=False)
其中,labels
是要删除的行或列的标签;axis
表示删除行还是列,0表示行,1表示列;index
和columns
分别表示要删除的行和列的标签,这两个参数是labels
和axis
的替代方式;inplace
表示是否在原地修改数据。
例如,我们有一个包含三列的DataFrame:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
print(df)
Output:
如果我们想要删除age
列,可以使用以下代码:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop('age', axis=1)
print(df)
Output:
或者使用columns
参数:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(columns='age')
print(df)
Output:
注意,这两种方式都不会修改原始的DataFrame,而是返回一个新的DataFrame。如果你想要在原地修改数据,可以设置inplace=True
:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop('age', axis=1, inplace=True)
print(df)
Output:
2. 删除多列
如果你想要删除多列,可以传入一个列标签的列表。例如,我们想要删除age
和city
两列,可以使用以下代码:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(['age', 'city'], axis=1)
print(df)
Output:
或者使用columns
参数:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(columns=['age', 'city'])
print(df)
Output:
同样,这两种方式都不会修改原始的DataFrame,而是返回一个新的DataFrame。如果你想要在原地修改数据,可以设置inplace=True
:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(['age', 'city'], axis=1, inplace=True)
print(df)
Output:
3. 根据条件删除列
有时候,我们想要根据某种条件来删除列。例如,我们想要删除所有包含缺失值的列。这时,我们可以先使用isnull
方法来检查每一列是否包含缺失值,然后使用any
方法来检查每一列是否有True(即是否包含缺失值),最后使用drop
方法来删除这些列。
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(df.columns[df.isnull().any()], axis=1)
print(df)
Output:
或者使用columns
参数:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(columns=df.columns[df.isnull().any()])
print(df)
Output:
同样,这种方式也不会修改原始的DataFrame,而是返回一个新的DataFrame。如果你想要在原地修改数据,可以设置inplace=True
:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(df.columns[df.isnull().any()], axis=1, inplace=True)
print(df)
Output:
4. 删除非数值列
在某些情况下,我们可能只对数值列感兴趣,因此想要删除所有非数值列。这时,我们可以使用select_dtypes
方法来选择所有数值列,然后使用drop
方法来删除这些列。
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(df.select_dtypes(include='object').columns, axis=1)
print(df)
Output:
或者使用columns
参数:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(columns=df.select_dtypes(include='object').columns)
print(df)
Output:
同样,这种方式也不会修改原始的DataFrame,而是返回一个新的DataFrame。如果你想要在原地修改数据,可以设置inplace=True
:
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df.drop(df.select_dtypes(include='object').columns, axis=1, inplace=True)
print(df)
Output:
5. 删除重复列
在某些情况下,我们的数据可能包含重复的列,我们想要删除这些重复的列。这时,我们可以使用T
属性来转置DataFrame(即将行和列互换),然后使用duplicated
方法来检查每一列是否重复,最后使用drop
方法来删除这些列。
import pandas as pd
data = {
'name': ['pandasdataframe.com', 'pandasdataframe.com', 'pandasdataframe.com'],
'age': [25, 30, 35],
'city': ['Beijing', 'Shanghai', 'Guangzhou']
}
df = pd.DataFrame(data)
df = df.T.drop_duplicates().T
print(df)
Output:
这种方式会修改原始的DataFrame,因为我们在转置后直接对DataFrame进行了修改。
总结
本文详细介绍了如何在pandas中删除列,包括删除单列、删除多列、根据条件删除列、删除非数值列和删除重复列等。