DrWhiter 发表于 2021-5-15 23:04:13

求助:关于字典和DataFrame对象的转化

本帖最后由 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    Chinese89   9593   7982   979190   87
1    Maths98   9981100931008789   88
2    English9110089   9195   979394100

我该怎么办?(请忽略字典中的浮点数,把他们看成整型)

林小林 发表于 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.090.091.082.089.0   95.093.0   97.0   79.0
1   88.089.087.093.098.0   99.081.0100.0100.0
2100.094.093.095.091.0100.089.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
print(table)
新的输出结果是:
   成绩\姓名    张三   李四    王五   赵六    刘七      甲   乙   丙      丁
0Chinese89.0   95.093.0   79.082.0   97.091.090.0   87.0
1    Maths98.0   99.081.0100.093.0100.087.089.0   88.0
2English91.0100.089.0   91.095.0   97.093.094.0100.0

123@321 发表于 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(,ignore_index=True)
subject=['Chinese','Maths','English']
df.insert(0,'成绩/姓名',subject)
print(df)
页: [1]
查看完整版本: 求助:关于字典和DataFrame对象的转化