看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本例我们利用 pandas 进行数值计算。现在的考试为了高效阅卷,选择题都采用答题卡形式,机器来识别答题卡中的答案返回每道题的分数。
以下为我们的示例数据:
import pandas as pd
data = [
['0,2,2,4,5,6,7,3,8,4,1,5'],
['3,1,3,4,0,6,7,3,3,8,3,2'],
['4,8,3,4,5,0,7,1,2,4,2,2'],
]
df = pd.DataFrame.from_records(data,
columns=['x'],
index=[*'abc'])
df
'''
x
a 0,2,2,4,5,6,7,3,8,4,1,5
b 3,1,3,4,0,6,7,3,3,8,3,2
c 4,8,3,4,5,0,7,1,2,4,2,2
'''
以上数据有 a、b、c 三位同学的答题情况,x 列为他们的机读答题卡分数,每道题用逗号隔开。
需求为计算出每个同学的总成绩。
x 列是一个字符串,它用们中的分数用逗号分隔表示,我们可以将其拆分转为列表,将每题的分数转为 DataFrame 的独立列。
最后就可以按行求和得到结果。
我们将 x 列使用 .str.<methed>
字符访问器使用 split() 用逗号拆分,传入 expand=True
将拆分的值转为列:
df.x.str.split(',', expand=True)
'''
x
a 0,2,2,4,5,6,7,3,8,4,1,5
b 3,1,3,4,0,6,7,3,3,8,3,2
c 4,8,3,4,5,0,7,1,2,4,2,2
'''
将所有数据转为整型,最后使用 sum() 对数据求和,为了按行进行求和,我们要给 sum() 传入 axis=1,简写为 sum(1)。
df.x.str.split(',', expand=True).astype(int).sum(1)
'''
a 47
b 43
c 42
dtype: int64
'''
这样就一行代码完成了需求。
(完)
更新时间:Aug. 18, 2024, 4 p.m. 标签:pandas python 答题卡 分数