如何仅将"未命名:"列重命名为数字索引

An *_*ist 2 python rename dataframe pandas

我正在阅读excel文件data frame.但是,我的前三列有标题,其余的只需要一个数字索引.当我读取文件时,我得到下面的输出.

        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
Run Code Online (Sandbox Code Playgroud)

我希望数据框看起来像这样,请记住,未命名列的数量可能会有所不同.

        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
Run Code Online (Sandbox Code Playgroud)

我怎样才能重命名所有Unnamed: #列并为它们分配数字索引?

jez*_*ael 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
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 5

我认为你不应该对你的映射进行硬编码.使用列表理解.

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
Run Code Online (Sandbox Code Playgroud)