首页 > 解决方案 > 如何从for循环将结果存储为数据帧

问题描述

我想获得 .csv 输出,等级规定为A, B+, B, ....

输入数据如下:

name,score
A, 55
B, 30
.
.
.

这是我的代码:

import pandas as pd
import numpy as np

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

#import data from google drive
student_list = pd.read_csv('/content/drive/MyDrive/Colab Notebooks/PYTHON CLASS/example_name-score.csv')
df = []
df = pd.DataFrame(student_list)

for  index, row in df.iterrows():
    df = grading(row['score'])
    df.append(df.strip())

我正在尝试将 df 列表添加到数据框的新列中,但出现错误

AttributeError: 'str' object has no attribute 'append'

标签: pythonpandasdataframe

解决方案


你得到了AttributeError因为 df 被分配来保存每一行的分级函数的值,这个值是一个 str 而不是原来的 DataFrame 了。

相反,您应该做的不是将整个 df 分配给该值,而是(以及您最初打算做的)是为新列设置值,如下所示(如评论部分所述:

df['grading'] = df['score'].apply(grading)

apply方法对于应用函数或 lambda 函数进行逐行赋值非常有用。应用负责迭代。因此,无需自己循环 df。

重要的是要强调操作设置为 df['grading'] 这是一个新的Pandas.Series(分配后使用 type(df['grading'] 自己检查它)。该系列是类似数组的对象,用作列在Pandas.DataFrame


推荐阅读