Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Python中DataFrame中的行转换为字典_Python_Dictionary_Pandas - Fatal编程技术网

如何将Python中DataFrame中的行转换为字典

如何将Python中DataFrame中的行转换为字典,python,dictionary,pandas,Python,Dictionary,Pandas,例如,我现在将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 {

例如,我现在将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  {...}

无论如何都要这样做吗?

我认为下面的代码将以您想要的格式为您提供数据帧。它还允许您选择任何列作为索引

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

对于像我这样的其他人来说,这是一个问题,但希望做到以下几点: 逐行创建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
在:

输出:

df=pd.DataFrame({'col1':[1,2],
'col2':[0.5,0.75]},
索引=['row1','row2'])
df
col1 col2
第1行10.50
第2排0.75
df.to_dict(东方class='index')
{'row1':{'col1':1,'col2':0.5},'row2':{'col1':2,'col2':0.75}

对我来说,这个解决方案没有调用
转置
。转置时,您的
评级
(列)成为(唯一)行,因此
df_map['Rating']
在my中返回了一个错误(非常类似)dfWorth为将来的读者补充说,orient参数会根据您想要分割数据帧的方式采用几个不同的值——关于这个方法的pandas文档可以在
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'}