将短语列表转换为相应的数字

Convert list of phrases into corresponding number

我正在研究 GPA 计算器,我有一个学生在 类 中的每个成绩的列表。我需要将字母等级(A+、B- 等)转换为相应的数值(4.3、2.7 等) 这是我目前所拥有的:

import pandas as pd
import openpyxl

df = pd.read_excel('/Users/mac/Downloads/Data Doc.xlsx')

values = {'A+':'4.3', 'A':'4', 'A-':'3.7', 'B+':'3.3', 'B':'3', 'B-':'2.7', 'C+':'2.3', 'C':'2', 'C-':'1.7', 'D+':'1.3', 'D':'1', 'D-':'.7', 'F':'0'}
l = df.values.tolist()

提前感谢您的帮助

您可以使用 Series.map 根据字母生成数字成绩。例如:

import pandas as pd
df = pd.DataFrame({ 'name' : ['John', 'Ellie', 'Bill'], 'grade': ['A', 'A+', 'C-'] } )
values = {'A+':'4.3', 'A':'4', 'A-':'3.7', 'B+':'3.3', 'B':'3', 'B-':'2.7', 'C+':'2.3', 'C':'2', 'C-':'1.7', 'D+':'1.3', 'D':'1', 'D-':'.7', 'F':'0'}
df['numgrade'] = df['grade'].map(values)

输出:

    name grade numgrade
0   John     A        4
1  Ellie    A+      4.3
2   Bill    C-      1.7

如果您不想保留 alpha 值,您可以简单地使用 replace:

df = pd.DataFrame({ 'name' : ['John', 'Ellie', 'Bill'], 'class 1': ['A', 'A+', 'C-'], 'class 2': ['A', 'B+', 'C+'] } )
values = {'A+':'4.3', 'A':'4', 'A-':'3.7', 'B+':'3.3', 'B':'3', 'B-':'2.7', 'C+':'2.3', 'C':'2', 'C-':'1.7', 'D+':'1.3', 'D':'1', 'D-':'.7', 'F':'0'}
df = df.replace(values)

这将替换整个数据框。输出:

    name class 1 class 2
0   John       4       4
1  Ellie     4.3     3.3
2   Bill     1.7     2.3

否则,您可以遍历成绩列(仅使用 filter 到 select 开头带有 class 的列)例如

df = pd.DataFrame({ 'name' : ['John', 'Ellie', 'Bill'], 'class 1': ['A', 'A+', 'C-'], 'class 2': ['A', 'B+', 'C+'] } )
values = {'A+':'4.3', 'A':'4', 'A-':'3.7', 'B+':'3.3', 'B':'3', 'B-':'2.7', 'C+':'2.3', 'C':'2', 'C-':'1.7', 'D+':'1.3', 'D':'1', 'D-':'.7', 'F':'0'}
for col in df.filter(regex='^class').columns:
    df[col + ' num'] = df[col].map(values)

输出:

    name class 1 class 2 class 1 num class 2 num
0   John       A       A           4           4
1  Ellie      A+      B+         4.3         3.3
2   Bill      C-      C+         1.7         2.3