Create column names for nested dictionary in pandas

Question:

I have a nested dictionary as below.

my_dic={'CELL1': {'C2': 'LOW', 'C3': 'HIGH', 'C4': 'Pass'}, 'CELL2': {'C2': 'LOW', 'C3': 'HIGH', 'C4': 'Pass'}, 'CELL3': {'C2': 'LOW', 'C3': 'HIGH', 'C4': 'Pass'}, 'CELL4': {'C2': 'LOW', 'C3': 'HIGH', 'C4': 'Pass'}, 'CELL5': {'C2': 'LOW', 'C3': 'HIGH', 'C4': 'Pass'}}

I am trying to print the data frame on to the console in the below format.

   C1     C2   C3      C4 
0  CELL1  LOW  HIGH   Pass
1  CELL2  LOW  HIGH   Pass
2  CELL3  LOW  HIGH   Pass
3  CELL4  LOW  HIGH   Pass
4  CELL5  LOW  HIGH   Pass
5  CELL5  LOW  HIGH   Pass

But when i try to overwrite the column names to what I want. I am getting the below error.

ValueError: Length mismatch: Expected axis has 0 elements, new values have 4 elements

I have tried the below code. Can someone help me out with this?

df_my =pd.DataFrame.from_dict(my_dic,orient = 'index').reset_index()
df_my.columns=["C1", "C2", "C3", "C4"]
Asked By: Perl

||

Answers:

You code should work, I would use:

df_my = (pd.DataFrame.from_dict(my_dic, orient='index')
           .rename_axis('C1').reset_index()
         )

output:

      C1   C2    C3    C4
0  CELL1  LOW  HIGH  Pass
1  CELL2  LOW  HIGH  Pass
2  CELL3  LOW  HIGH  Pass
3  CELL4  LOW  HIGH  Pass
4  CELL5  LOW  HIGH  Pass
Answered By: mozway

One way to do is to use transform of the df:

pd.DataFrame(my_dict).T.reset_index().rename(columns={'index':'C1'})

or

pd.DataFrame(my_dict).T.rename_axis('C1').reset_index()

output:

      C1   C2    C3    C4
0  CELL1  LOW  HIGH  Pass
1  CELL2  LOW  HIGH  Pass
2  CELL3  LOW  HIGH  Pass
3  CELL4  LOW  HIGH  Pass
4  CELL5  LOW  HIGH  Pass
Answered By: SomeDude
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.