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

Posted

技术标签:

【中文标题】如何仅将“未命名:”列重命名为数字索引【英文标题】:How to rename only 'Unnamed:' columns as numeric index 【发布时间】:2018-01-25 15:06:59 【问题描述】:

我正在以data frame 的形式读取 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: # 【参考方案1】:

我认为您不应该对映射进行硬编码。使用列表推导。

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

【讨论】:

【参考方案2】:

您可以创建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

【讨论】:

以上是关于如何仅将“未命名:”列重命名为数字索引的主要内容,如果未能解决你的问题,请参考以下文章

使用文件名列表重命名批处理文件

用名称中的句点重命名clickhouse中的列

重命名 node.js 续集时间戳列

r 将列重命名为R友好名称

将列重命名为MS SQL

oracle 查询数据重命名为汉字对效率有影响吗?