How to convert rows in DataFrame in Python to dictionaries

PythonDictionaryPandas

Python Problem Overview


For example, I have DataFrame now as

id score1 	score2 	score3 	score4 	score5
1  0.000000 	0.108659 	0.000000 	0.078597 	1
2  0.053238 	0.308253 	0.286353 	0.446433 	1
3  0.000000 	0.083979 	0.808983 	0.233052 	1

I want to convert it as

id scoreDict
1  {'1': 0, '2': 0.1086, ...}
2  {...}
3  {...}

Anyway to do that?

Python Solutions


Solution 1 - Python

import pandas as pd

# your df
# =========================
print(df)

   id  score1  score2  score3  score4  score5
0   1  0.0000  0.1087  0.0000  0.0786       1
1   2  0.0532  0.3083  0.2864  0.4464       1
2   3  0.0000  0.0840  0.8090  0.2331       1

# to_dict
# =========================
df.to_dict(orient='records')

Out[318]: 
[{'id': 1.0,
  'score1': 0.0,
  'score2': 0.10865899999999999,
  'score3': 0.0,
  'score4': 0.078597,
  'score5': 1.0},
 {'id': 2.0,
  'score1': 0.053238000000000001,
  'score2': 0.308253,
  'score3': 0.28635300000000002,
  'score4': 0.44643299999999997,
  'score5': 1.0},
 {'id': 3.0,
  'score1': 0.0,
  'score2': 0.083978999999999998,
  'score3': 0.80898300000000001,
  'score4': 0.23305200000000001,
  'score5': 1.0}]

Solution 2 - Python

For others like me coming to this question but looking to do the following: Create a dict row by row to map a column based of the value of the adjacent column.

Here's our mapping table:

  Rating	y
0  AAA	    19
1  AA1	    18
2  AA2	    17
3  AA3	    16
4  A1	    15
5  A2	    14
6  A3	    13
      ...
19 D       0

IN:

import pandas as pd
df_map.set_index('y')
dict_y = df_map['Rating'].to_dict()

OUT:

{19: 'AAA',
 18: 'AA1',
 17: 'AA2',
 16: 'AA3',
 15: 'A1',
 14: 'A2',
 13: 'A3',
 12: 'BBB1',
 11: 'BBB2',
 10: 'BBB3',
 9: 'BB1',
 8: 'BB2',
 7: 'BB3',
 6: 'B1',
 5: 'B2',
 4: 'B3',
 3: 'CCC1',
 2: 'CCC2',
 1: 'D'}

Solution 3 - Python

df = pd.DataFrame({'col1': [1, 2],
                   'col2': [0.5, 0.75]},
                   index=['row1', 'row2'])
df
      col1 	col2
row1 	1 	0.50
row2 	2 	0.75

df.to_dict(orient='index')
{'row1': {'col1': 1, 'col2': 0.5}, 'row2': {'col1': 2, 'col2': 0.75}}

Solution 4 - Python

I think the below code will give you the data frame in the format you are looking for. Also it allows you to choose any column as an index

import pandas as pd

#IMPORT YOUR DATA
#Any other way to import data can also be used. I saved it in .csv file 
df=pd.read_csv('dftestid.csv')
print("INITIAL DATAFRAME")
print(df)
print()

#Convert Data Frame to Dictionary (set_index method allows any column to be used as index)
df2dict=df.set_index('id').transpose().to_dict(orient='dict')


#Convert Dictionary to List with 'score' replaced
dicttolist=[[k,{int(k1.replace('score','')):v1 for k1,v1 in v.items()}] for k,v in df2dict.items()]

#"Create the new DataFrame"

df2=pd.DataFrame(dicttolist,columns=['id', 'scoreDict'])
print("NEW DATAFRAME")
print(df2)


OUT:
INITIAL DATAFRAME
   id    score1    score2    score3    score4  score5
0   1  0.000000  0.108659  0.000000  0.078597       1
1   2  0.053238  0.308253  0.286353  0.446433       1
2   3  0.000000  0.083979  0.808983  0.233052       1

NEW DATAFRAME
   id                                          scoreDict
0   1  {1: 0.0, 2: 0.108659, 3: 0.0, 4: 0.078597, 5: ...
1   2  {1: 0.053238, 2: 0.308253, 3: 0.286353, 4: 0.4...
2   3  {1: 0.0, 2: 0.083979, 3: 0.808983, 4: 0.233052...

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionVickyView Question on Stackoverflow
Solution 1 - PythonJianxun LiView Answer on Stackoverflow
Solution 2 - PythonAdavView Answer on Stackoverflow
Solution 3 - PythonalienzjView Answer on Stackoverflow
Solution 4 - PythonoldmonkView Answer on Stackoverflow