Saya membaca file excel sebagai data frame. Namun, tiga kolom pertama saya memiliki header dan sisanya hanya membutuhkan indeks numerik. Ketika saya membaca file di saya mendapatkan output di bawah ini.

        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

Saya ingin memiliki bingkai data yang terlihat seperti ini, mengingat bahwa jumlah kolom yang tidak disebutkan namanya dapat bervariasi.

        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

Bagaimana saya bisa mengganti nama semua kolom Unnamed: # dan menetapkannya sebagai indeks numerik?

3
An economist 17 Agustus 2017, 12:14

2 jawaban

Jawaban Terbaik

Saya tidak berpikir Anda harus membuat hardcode pemetaan Anda. Gunakan pemahaman daftar.

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
cs95 17 Agustus 2017, 09:28

Anda dapat membuat dict dan kemudian 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
5
jezrael 17 Agustus 2017, 09:17