鱼C论坛

 找回密码
 立即注册
查看: 1369|回复: 2

[已解决]求助:关于字典和DataFrame对象的转化

[复制链接]
发表于 2021-5-15 23:04:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 DrWhiter 于 2021-5-15 23:07 编辑

我有三个字典,他们是这样的:
Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}
现在我想把他们转化成像下面一样的DataFrame对象:
  成绩\姓名  张三   李四  王五   赵六  刘七    甲   乙   丙    丁
0    Chinese  89   95  93   79  82   97  91  90   87
1    Maths  98   99  81  100  93  100  87  89   88
2    English  91  100  89   91  95   97  93  94  100
我该怎么办?(请忽略字典中的浮点数,把他们看成整型)
最佳答案
2021-5-16 06:53:52
本帖最后由 林小林 于 2021-5-16 07:08 编辑
import pandas as pd

Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}

table = pd.DataFrame()
table = table.append(Chinese,ignore_index=True)
table = table.append(Maths,ignore_index=True)
table = table.append(English,ignore_index=True)

print(table)
这样能满足你的要求吗
输出结果是
       丁     丙     乙    刘七    张三     李四    王五      甲     赵六
0   87.0  90.0  91.0  82.0  89.0   95.0  93.0   97.0   79.0
1   88.0  89.0  87.0  93.0  98.0   99.0  81.0  100.0  100.0
2  100.0  94.0  93.0  95.0  91.0  100.0  89.0   97.0   91.0

若想加入科目名称,并且让datafrmae中顺序和列表中顺序一样,我又改进了一下:
import pandas as pd

Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}

Chinese.update({'成绩\姓名':'Chinese'})
Maths.update({'成绩\姓名':'Maths'})
English.update({'成绩\姓名':'English'})

title = list(Chinese)
title.insert(0,title.pop())

table = pd.DataFrame()
table = table.append(Chinese,ignore_index=True)
table = table.append(Maths,ignore_index=True)
table = table.append(English,ignore_index=True)

table = table[title]
print(table)
新的输出结果是:
     成绩\姓名    张三     李四    王五     赵六    刘七      甲     乙     丙      丁
0  Chinese  89.0   95.0  93.0   79.0  82.0   97.0  91.0  90.0   87.0
1    Maths  98.0   99.0  81.0  100.0  93.0  100.0  87.0  89.0   88.0
2  English  91.0  100.0  89.0   91.0  95.0   97.0  93.0  94.0  100.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-16 06:53:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 林小林 于 2021-5-16 07:08 编辑
import pandas as pd

Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}

table = pd.DataFrame()
table = table.append(Chinese,ignore_index=True)
table = table.append(Maths,ignore_index=True)
table = table.append(English,ignore_index=True)

print(table)
这样能满足你的要求吗
输出结果是
       丁     丙     乙    刘七    张三     李四    王五      甲     赵六
0   87.0  90.0  91.0  82.0  89.0   95.0  93.0   97.0   79.0
1   88.0  89.0  87.0  93.0  98.0   99.0  81.0  100.0  100.0
2  100.0  94.0  93.0  95.0  91.0  100.0  89.0   97.0   91.0

若想加入科目名称,并且让datafrmae中顺序和列表中顺序一样,我又改进了一下:
import pandas as pd

Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}

Chinese.update({'成绩\姓名':'Chinese'})
Maths.update({'成绩\姓名':'Maths'})
English.update({'成绩\姓名':'English'})

title = list(Chinese)
title.insert(0,title.pop())

table = pd.DataFrame()
table = table.append(Chinese,ignore_index=True)
table = table.append(Maths,ignore_index=True)
table = table.append(English,ignore_index=True)

table = table[title]
print(table)
新的输出结果是:
     成绩\姓名    张三     李四    王五     赵六    刘七      甲     乙     丙      丁
0  Chinese  89.0   95.0  93.0   79.0  82.0   97.0  91.0  90.0   87.0
1    Maths  98.0   99.0  81.0  100.0  93.0  100.0  87.0  89.0   88.0
2  English  91.0  100.0  89.0   91.0  95.0   97.0  93.0  94.0  100.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-16 12:08:59 | 显示全部楼层
本帖最后由 123@321 于 2021-5-16 12:19 编辑

import pandas as pd
import numpy as np
Chinese = {'张三': 89.0, '李四': 95.0, '王五': 93.0, '赵六': 79.0, '刘七': 82.0, '甲': 97.0, '乙': 91.0, '丙': 90.0, '丁': 87.0}
Maths = {'张三': 98.0, '李四': 99.0, '王五': 81.0, '赵六': 100.0, '刘七': 93.0, '甲': 100.0, '乙': 87.0, '丙': 89.0, '丁': 88.0}
English = {'张三': 91.0, '李四': 100.0, '王五': 89.0, '赵六': 91.0, '刘七': 95.0, '甲': 97.0, '乙': 93.0, '丙': 94.0, '丁': 100.0}
Chinese_mark=np.array(list(Chinese.values())).reshape(1,9)
Maths_mark=np.array(list(Maths.values())).reshape(1,9)
English_mark=np.array(list(English.values())).reshape(1,9)
df1=pd.DataFrame(Chinese_mark,columns=Chinese.keys())
df2=pd.DataFrame(Maths_mark,columns=Chinese.keys())
df3=pd.DataFrame(English_mark,columns=Chinese.keys())
df=pd.concat([df1,df2,df3],ignore_index=True)
subject=['Chinese','Maths','English']
df.insert(0,'成绩/姓名',subject)
print(df)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表