如何将仅有的“Unnamed:”列重命名为数字索引

3

我将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

如何将所有Unnamed: #列重命名并分配数字索引?


这一列叫做“unnamed”还是根本没有名字(即空白)? - cs95
Pandas默认会分配Unnamed:# - An economist
2个回答

6

我认为您不应该硬编码映射关系,而是使用列表推导式。

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

5
你可以创建dict,然后进行rename:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接