将student_grade_str中字符串转为int时出现KeyError:0的解决方法
错误原因与修复方法
1. 错误解析
- KeyError: 0:
student_grade_str是pandas的DataFrame对象,用student_grade_str[i]的方式会去查找列名为i的列,而非第i行数据。你的数据中不存在列名为0的列,因此触发KeyError。 map(int())的语法错误:map()的第一个参数需要传入函数对象,你写的int()是执行int函数(返回0),正确写法是直接传int。
2. 修复方案
方案一:修正循环逻辑(逐行处理)
若坚持用循环处理,需用iloc[i]获取第i行数据,同时修正map的用法:
import pandas as pd from google.colab import drive drive.mount('/content/drive') student_grade_str = pd.read_csv('/content/drive/MyDrive/student_power_research.csv') student_grade_int = [] for i in range(len(student_grade_str)): # 用iloc[i]获取第i行,转为列表后批量转int row_int = list(map(int, student_grade_str.iloc[i].tolist())) student_grade_int.append(row_int)
方案二:高效批量转换(推荐)
pandas内置astype()方法可批量转换数据类型,无需手动循环,效率更高:
import pandas as pd from google.colab import drive drive.mount('/content/drive') student_grade_str = pd.read_csv('/content/drive/MyDrive/student_power_research.csv') # 转换整个DataFrame的所有列为int类型 student_grade_int = student_grade_str.astype(int) # 若仅需转换特定列(比如列名为"grade"),可指定列: # student_grade_int = student_grade_str["grade"].astype(int)
异常处理补充
如果数据中存在无法转换为int的内容(如空值、字母),可通过errors参数处理:
# 无法转换的内容会被转为NaN student_grade_int = student_grade_str.astype(int, errors='coerce') # 或忽略无法转换的列/行 # student_grade_int = student_grade_str.astype(int, errors='ignore')
内容的提问来源于stack exchange,提问作者侯凌群
相关产品推荐
相关产品推荐

