求助:关于字典和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 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: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]