Make first row and first column as column header and row index respectively in a dataframe

I've a similar dataframe like the one below.

a = pd.DataFrame({'Unnamed:0':[np.nan,'T1','T2','T3','T4'],
                  'Unnamed:1':['A',33,52,55,21],
                  'Unnamed:2':['B',2.1,2.1,2.1,2.1],
                  'Unnamed:3':['C',22,23,14,19]})

Unnamed:0   Unnamed:1   Unnamed:2   Unnamed:3
0   NaN A   B   C
1   T1  33  2.1 22
2   T2  52  2.1 23
3   T3  55  2.1 14
4   T4  21  2.1 19

I'm trying to make the first row and column as the headers of this dataframe. I've tried with this

a.columns = a.iloc[0]
a = a[1:]
a.set_index(a.columns[0])

this generates the dataframe like below. Is there a way to remove the index header 'nan' here?

    A   B   C
nan         
T1  33  2.1 22
T2  52  2.1 23
T3  55  2.1 14
T4  21  2.1 19

Upvotes: 1

Views: 1526

Answers (1)

jezrael
jezrael

Reputation: 862511

Use DataFrame.rename_axis:

a.columns = a.iloc[0]
a = a[1:]
a.set_index(a.columns[0]).rename_axis(index=None, columns=None)

Or for one line solution use DataFrame.set_axis for set columns names:

a = (a.iloc[1:]
      .set_axis(a.iloc[0], axis=1)
      .set_index(a.iat[0,0])
      .rename_axis(index=None, columns=None))
print (a)
     A    B   C
T1  33  2.1  22
T2  52  2.1  23
T3  55  2.1  14
T4  21  2.1  19

Upvotes: 1

Related Questions