如何在pandas 数据框架中删除未命名的列(两种方法)

999 阅读2分钟

你可以使用以下两种方法来删除pandas DataFrame中列名中含有 "Unnamed "的列。

方法1:导入数据时删除未命名的列

df = pd.read_csv('my_data.csv', index_col=0)

方法2:导入数据后删除无名列

df = df.loc[:, ~df.columns.str.contains('^Unnamed')]

下面的例子展示了如何在实践中使用每种方法。

例1:导入数据时删除未命名的列

假设我们创建了一个简单的pandas DataFrame并将其导出到CSV文件:

import pandas as pd

#create DataFrame
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F'],
                    'points': [4, 4, 6, 8, 9, 5],
                    'rebounds': [12, 7, 8, 8, 5, 11]})

#view DataFrame
print(df1)

  team  points  rebounds
0    A       4        12
1    B       4         7
2    C       6         8
3    D       8         8
4    E       9         5
5    F       5        11

#export DataFrame to CSV file
df1.to_csv('my_data.csv')

现在当我们试图将该文件读入pandas DataFrame时,第一列的名字是Unnamed: 0

#import CSV file
df2 = pd.read_csv('my_data.csv')

#view DataFrame
print(df2)

   Unnamed: 0 team  points  rebounds
0           0    A       4        12
1           1    B       4         7
2           2    C       6         8
3           3    D       8         8
4           4    E       9         5
5           5    F       5        11

为了避免这种情况,我们可以指定 index_col=0来告诉pandas,第一列实际上是索引列:

#import CSV file
df2 = pd.read_csv('my_data.csv', index_col=0)

#view DataFrame
print(df2)

  team  points  rebounds
0    A       4        12
1    B       4         7
2    C       6         8
3    D       8         8
4    E       9         5
5    F       5        11

例2:导入数据后删除未命名列

假设我们创建了一个简单的pandas DataFrame,并将其导出到一个CSV文件:

import pandas as pd

#create DataFrame
df1 = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F'],
                    'points': [4, 4, 6, 8, 9, 5],
                    'rebounds': [12, 7, 8, 8, 5, 11]})

#export DataFrame to CSV file
df1.to_csv('my_data.csv')

现在假设我们把这个文件导入到一个pandas DataFrame中:

#import CSV file
df2 = pd.read_csv('my_data.csv')

#view DataFrame
print(df2)

   Unnamed: 0 team  points  rebounds
0           0    A       4        12
1           1    B       4         7
2           2    C       6         8
3           3    D       8         8
4           4    E       9         5
5           5    F       5        11

要删除名称中包含 "Unnamed "的列,我们可以使用以下语法:

#drop any column that contains "Unnamed" in column name
df2 = df2.loc[:, ~df2.columns.str.contains('^Unnamed')]

#view updated DataFrame
print(df2)

  team  points  rebounds
0    A       4        12
1    B       4         7
2    C       6         8
3    D       8         8
4    E       9         5
5    F       5        11

注意,"Unnamed: 0 "列已经从DataFrame中删除了。

其他资源

下面的教程解释了如何在pandas中执行其他常见任务:

如何在Pandas数据框架中删除第一行
如何在Pandas数据框架中删除第一列
如何在Pandas中删除重复的列