Vicky
Vicky

Reputation: 1625

How to convert rows in DataFrame in Python to dictionaries

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?

Upvotes: 124

Views: 185779

Answers (4)

Adav
Adav

Reputation: 468

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'}

Upvotes: 16

alienzj
alienzj

Reputation: 121

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}}

Upvotes: 12

oldmonk
oldmonk

Reputation: 691

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...

Upvotes: 4

Jianxun Li
Jianxun Li

Reputation: 24752

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}]

Upvotes: 242

Related Questions