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

如何通过For循环将结果存储为DataFrame并生成符合等级规则的CSV文件及报错解决

解决AttributeError并实现成绩等级计算与DataFrame存储问题

首先,咱们先搞清楚你遇到的AttributeError: 'str' object has no attribute 'append'错误原因:
你在for循环里把原本指向DataFrame的变量df重新赋值成了grading(row['score'])返回的字符串(比如'A'、'E'这类等级),之后再调用df.append()时,自然会报错——字符串类型根本没有append方法呀!

接下来咱们一步步修正代码,同时满足你的两个需求:生成符合等级规则的CSV文件,以及正确用循环(或更高效的方式)把结果存入DataFrame。

方法1:使用For循环实现(符合你的需求)

我们需要保留原始DataFrame,然后新增一列grade,在循环里逐个计算每个学生的等级并赋值:

import pandas as pd

# 定义等级计算函数
def grading(x):
    if 90 <= x <= 100:
        return 'A'
    elif 85 <= x <= 89.99:
        return 'B+'
    elif 80 <= x <= 84.99:
        return 'B'
    elif 75 <= x <= 79.99:
        return 'C+'
    elif 70 <= x <= 74.99:
        return 'C'
    elif 65 <= x <= 69.99:
        return 'D+'
    elif 60 <= x <= 64.99:
        return 'D'
    else:
        return 'E'

# 读取输入CSV文件
student_list = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/PYTHON CLASS/example_name-score.csv')
df = pd.DataFrame(student_list)

# 新增grade列,初始值设为空
df['grade'] = ''

# 使用iterrows循环遍历每一行,计算等级并赋值
for index, row in df.iterrows():
    # 计算当前行的成绩等级
    current_grade = grading(row['score'])
    # 把等级赋值给df的grade列对应行
    df.loc[index, 'grade'] = current_grade

# 输出带等级的CSV文件
df.to_csv('student_grades.csv', index=False)

# 查看结果
print(df.head())

方法2:更高效的pandas apply方法(推荐)

虽然你提到了For循环,但pandas提供了更高效的apply方法,不需要手动写循环,代码更简洁:

import pandas as pd

def grading(x):
    if 90 <= x <= 100:
        return 'A'
    elif 85 <= x <= 89.99:
        return 'B+'
    elif 80 <= x <= 84.99:
        return 'B'
    elif 75 <= x <= 79.99:
        return 'C+'
    elif 70 <= x <= 74.99:
        return 'C'
    elif 65 <= x <= 69.99:
        return 'D+'
    elif 60 <= x <= 64.99:
        return 'D'
    else:
        return 'E'

# 读取数据
df = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/PYTHON CLASS/example_name-score.csv')

# 直接用apply生成grade列
df['grade'] = df['score'].apply(grading)

# 保存为CSV
df.to_csv('student_grades.csv', index=False)

print(df.head())

关键说明:

  • 两种方法都实现了:读取输入CSV、计算等级、新增等级列、输出带等级的CSV文件。
  • 方法1严格遵循了你要求的For循环方式,适合理解遍历DataFrame的过程;方法2是pandas的惯用写法,处理大数据量时效率更高。
  • 注意to_csv时加上index=False,避免把DataFrame的索引列写入CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:22:27