Python 如何仅重命名';未命名:';列作为数字索引

Python 如何仅重命名';未命名:';列作为数字索引,python,pandas,dataframe,rename,Python,Pandas,Dataframe,Rename,我正在将excel文件作为数据框读取。然而,我的前三列有标题,其余的只需要一个数字索引。当我在中读取文件时,我得到下面的输出 a b c Unnamed: 4 Unnamed: 5 Unnamed: 6 0 0.109066 -1.112704 -0.545209 0.109066 -1.112704 -0.545209 1 0.447114 1.525341 0.317252 0.109066 -1.112704

我正在将excel文件作为
数据框
读取。然而,我的前三列有标题,其余的只需要一个数字索引。当我在中读取文件时,我得到下面的输出

        a         b         c    Unnamed: 4  Unnamed: 5  Unnamed: 6
0  0.109066 -1.112704 -0.545209  0.109066   -1.112704   -0.545209
1  0.447114  1.525341  0.317252  0.109066   -1.112704   -0.545209
2  0.507495  0.137863  0.886283  1.452867    1.888363    1.168101
3  1.452867  1.888363  1.168101  0.901371   -0.704805    0.088335
4  0.901371 -0.704805  0.088335  0.901371   -0.704805    0.088335
我希望数据帧看起来像这样,记住未命名列的数量可能会有所不同

        a         b         c        1           2           3
0  0.109066 -1.112704 -0.545209  0.109066   -1.112704   -0.545209
1  0.447114  1.525341  0.317252  0.109066   -1.112704   -0.545209
2  0.507495  0.137863  0.886283  1.452867    1.888363    1.168101
3  1.452867  1.888363  1.168101  0.901371   -0.704805    0.088335
4  0.901371 -0.704805  0.088335  0.901371   -0.704805    0.088335

如何重命名所有
未命名:#
列并为它们指定数字索引?

您可以创建
dict
,然后
重命名

a = df.columns[df.columns.str.startswith('Unnamed')]
d = dict(zip(a, range(1, len(a)+1)))
print (d)
{'Unnamed: 4': 1, 'Unnamed: 6': 3, 'Unnamed: 5': 2}

df = df.rename(columns=d)
print (df)
          a         b         c         1         2         3
0  0.109066 -1.112704 -0.545209  0.109066 -1.112704 -0.545209
1  0.447114  1.525341  0.317252  0.109066 -1.112704 -0.545209
2  0.507495  0.137863  0.886283  1.452867  1.888363  1.168101
3  1.452867  1.888363  1.168101  0.901371 -0.704805  0.088335
4  0.901371 -0.704805  0.088335  0.901371 -0.704805  0.088335

我认为您不应该硬编码映射。使用列表理解

In [550]: i = iter(range(1, len(df.columns) + 1))

In [551]: df.columns = [x if not x.startswith('Unnamed') else next(i) for x in df.columns]

In [552]: df
Out[552]: 
          a         b         c         1         2         3
0  0.109066 -1.112704 -0.545209  0.109066 -1.112704 -0.545209
1  0.447114  1.525341  0.317252  0.109066 -1.112704 -0.545209
2  0.507495  0.137863  0.886283  1.452867  1.888363  1.168101
3  1.452867  1.888363  1.168101  0.901371 -0.704805  0.088335
4  0.901371 -0.704805  0.088335  0.901371 -0.704805  0.088335

该列是名为“未命名”还是根本没有名称(即空白)?熊猫默认为其分配
unnamed:35;