Python 如何仅重命名';未命名:';列作为数字索引
我正在将excel文件作为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
数据框
读取。然而,我的前三列有标题,其余的只需要一个数字索引。当我在中读取文件时,我得到下面的输出
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;