You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas转换字符串为数值时触发invalid literal for int() with base 10错误求助

解决思路与代码实现

你的问题核心在于直接将字母成绩转为数值类型是行不通的,因为A/B这类字符本身不是数字,必须先建立字母到数值的映射规则(比如常见的GPA计分规则),再逐步处理。

步骤说明

  • 先定义字母成绩对应的数值映射表(可根据实际需求调整)
  • 拆分每门课的成绩字符串为单个成绩列表
  • 将列表中的每个字母替换为对应数值
  • 基于数值列表计算最高分和最低分

完整代码

import pandas as pd

# 1. 定义字母成绩到数值的映射(可根据你的评分标准调整)
grade_map = {'A': 4, 'B': 3, 'C': 2, 'D': 1, 'F': 0}

# 2. 读取CSV数据
df = pd.read_csv('grades.csv')

# 3. 拆分成绩字符串,转换为数值列表
def convert_grades(grade_str):
    # 拆分逗号分隔的成绩,转为大写(避免大小写问题),再映射为数值
    grades_list = [grade_map[grade.strip().upper()] for grade in grade_str.split(',')]
    return grades_list

df['numeric_grades'] = df['Grades_Recieved'].apply(convert_grades)

# 4. 计算每门课的最高/最低成绩
df['highest_grade'] = df['numeric_grades'].apply(max)
df['lowest_grade'] = df['numeric_grades'].apply(min)

# 可选:如果需要把数值转回字母成绩(比如展示最高分对应的字母)
reverse_grade_map = {v: k for k, v in grade_map.items()}
df['highest_letter'] = df['highest_grade'].map(reverse_grade_map)
df['lowest_letter'] = df['lowest_grade'].map(reverse_grade_map)

print(df)

代码解释

  • grade_map:自定义的成绩映射规则,你可以根据实际评分标准修改(比如A=5,B=4等)
  • convert_grades函数:处理单个成绩字符串,拆分后通过映射表转为数值列表
  • apply方法:对DataFrame的每一行执行转换和计算操作
  • 最后可选的反向映射:可以把数值转回字母,方便直观查看

输出示例

运行后会得到包含原始数据、数值成绩列表、最高/最低分(数值+字母)的DataFrame:

Course Grades_Recieved numeric_grades  highest_grade  lowest_grade highest_letter lowest_letter
0  098321          A,B,D        [4, 3, 1]              4              1              A              D
1  324323        C,B,D,F     [2, 3, 1, 0]              3              0              B              F
2  213323        A,B,D,F     [4, 3, 1, 0]              4              0              A              F

内容的提问来源于stack exchange,提问作者Steph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:20:42