web-dev-qa-db-ja.com

DataFrameの行をPython辞書に変換する方法

たとえば、DataFrameは次のようになりました

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

変換したい

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

とにかくそれをする?

前もって感謝します!

31
Vicky
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}]
65
Jianxun Li

私のような人がこの質問に来て、次のことをしたい場合:dict列を行ごとに作成して、隣接する列の値に基づいて列をマップします。

マッピングテーブルは次のとおりです。

  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

に:

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

でる:

{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'}
2
Adav

次のコードは、探している形式のデータフレームを提供すると思います。また、インデックスとして任意の列を選択できます

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...
2
oldmonk
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}}
0
alienzj