鱼C论坛

 找回密码
 立即注册
查看: 2555|回复: 10

[已解决]【Pandas】这一段代码为什么会报错?

[复制链接]
发表于 2021-2-17 18:56:21 | 显示全部楼层 |阅读模式
5鱼币
import pandas as pd

#识别登分表中含有的科目
data = pd.read_excel(r'D:\Desktop\登分表.xls')
columns = list(data.columns)
subjects_list = ['语文','数学','英语','日语','外语','物理','化学','地理','生物','政治','历史']
subjects = [i for i in columns if i in subjects_list]

#新增已有科目的单科排名sheet
with pd.ExcelWriter(r'D:\Desktop\成绩统计.xls') as writer:
    data.to_excel(writer, sheet_name='所有科目')
    Personal_Information = columns.index(subjects[1])-1
    for i in subjects:
        rank = i +'单科排名'
        single_subject_ranking = data.loc[:,i]
        single_subject_ranking.sort_values(rank,inplace = True)
        single_subject_ranking.to_excel(writer,sheet = rank)

sequence = []
for i in subjects:
    data[i + '排名'] = data[i].rank(method='min', ascending=False)
    sequence.append(i,i+'排名')
data['三科总分'] = data['语文'] + data['数学'] + data['英语']
data['三科总分排名'] = data['三科总分'].rank(method = 'min',ascending = False)
data[range(subjects) + '科总分'] = data.loc[Personal_Information:].sum(axis=1)
data[range(subjects) + '科总分名次'] = data[range(subjects)].rank(method = 'min',ascending = False)
data.sort_values(by= range(subjects) + "科总分名次", inplace=True)

如上
最佳答案
2021-2-17 18:56:22
本帖最后由 来自星星的小明 于 2021-2-18 14:46 编辑

rank = i +'单科排名'
single_subject_ranking.sort_values(rank,inplace = True)
rank 是你自己新定义的字段,原数据并不存在这一列,不能根据rank字段排序

sort_values()
by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名";
single_subject_ranking = data.loc[:,i]
这句代码只是拿到了这个DataFrame中的数据,没有表头,是根据表头的字段对应的列进行排序的

最佳答案

查看完整内容

rank = i +'单科排名' single_subject_ranking.sort_values(rank,inplace = True) rank 是你自己新定义的字段,原数据并不存在这一列,不能根据rank字段排序 sort_values() by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名"; single_subject_ranking = data.loc[:,i] 这句代码只是拿到了这个DataFrame中的数据,没有表头,是根据表头的字段对应的列进行排序的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-17 18:56:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 来自星星的小明 于 2021-2-18 14:46 编辑

rank = i +'单科排名'
single_subject_ranking.sort_values(rank,inplace = True)
rank 是你自己新定义的字段,原数据并不存在这一列,不能根据rank字段排序

sort_values()
by:str or list of str;如果axis=0,那么by="列名";如果axis=1,那么by="行名";
single_subject_ranking = data.loc[:,i]
这句代码只是拿到了这个DataFrame中的数据,没有表头,是根据表头的字段对应的列进行排序的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-17 19:00:43 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-2-17 19:02 编辑

报错信息是什么

第15行是不是多一个逗号?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-17 19:08:52 | 显示全部楼层
qq1151985918 发表于 2021-2-17 19:00
报错信息是什么

第15行是不是多一个逗号?

第16行报错,ValueError: No axis named 语文单科排名 for object type Series
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-18 09:01:53 | 显示全部楼层
lzymm1 发表于 2021-2-17 19:08
第16行报错,ValueError: No axis named 语文单科排名 for object type Series

除非你把execel表发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 13:13:00 | 显示全部楼层
wp231957 发表于 2021-2-18 09:01
除非你把execel表发出来

怎么发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 13:14:47 | 显示全部楼层
wp231957 发表于 2021-2-18 09:01
除非你把execel表发出来

考号班别姓名语文数学英语物理化学生物政治历史地理
1
1
69
130
28
99
90
87
46
46
88
2
1
92
113
74.5
85
56
62
57
51
57
3
1
93
107
62
62
82
88
67
59
29
4
1
94
110
118.5
42
72
78
77
71
33
5
1
102
89
45.5
59
80
85
64
44
68
6
1
83
100
73
76
68
81
77
64
65
7
1
84
105
73.5
65
52
73
64
41
51
8
1
74
118
34
69
90
88
45
53
51
9
1
86
95
100
61
62
41
66
37
29
10
1
82
59
85
43
34
58
68
66
41
11
1
84
98
89.5
65
60
73
57
57
50
12
1
81
59
105
56
76
74
64
51
61
13
1
120
102
59.5
40
58
49
69
37
38
14
1
86
94
52
55
52
55
65
67
54
15
1
95
67
93
35
34
32
62
35
34
16
1
88
63
67.5
51
62
68
51
32
47
17
1
82
106
55.5
55
52
72
46
57
61
18
1
94
34
67
45
40
47
52
52
45
19
1
96
73
63.5
46
47
66
59
71
58
20
1
101
84
68
51
58
63
63
41
40

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 13:15:27 | 显示全部楼层
wp231957 发表于 2021-2-18 09:01
除非你把execel表发出来

大概就是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 13:33:22 | 显示全部楼层
wp231957 发表于 2021-2-18 09:01
除非你把execel表发出来

第十六行是(by = rank,inplace = True)的话,就会说:
TypeError: sort_values() got an unexpected keyword argument'by'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 13:33:51 | 显示全部楼层
qq1151985918 发表于 2021-2-17 19:00
报错信息是什么

第15行是不是多一个逗号?

第十六行是(by = rank,inplace = True)的话,就会说:
TypeError: sort_values() got an unexpected keyword argument'by'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-18 14:53:47 | 显示全部楼层
来自星星的小明 发表于 2021-2-17 18:56
rank = i +'单科排名'
single_subject_ranking.sort_values(rank,inplace = True)
rank 是你自己新定义的 ...

谢谢,悟了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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