python - 如何从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'
解决方案
你得到了AttributeError
因为 df 被分配来保存每一行的分级函数的值,这个值是一个 str 而不是原来的 DataFrame 了。
相反,您应该做的不是将整个 df 分配给该值,而是(以及您最初打算做的)是为新列设置值,如下所示(如评论部分所述:
df['grading'] = df['score'].apply(grading)
apply方法对于应用函数或 lambda 函数进行逐行赋值非常有用。应用负责迭代。因此,无需自己循环 df。
重要的是要强调操作设置为 df['grading'] 这是一个新的Pandas.Series
(分配后使用 type(df['grading'] 自己检查它)。该系列是类似数组的对象,用作列在Pandas.DataFrame
推荐阅读
- django - 日期管道在 Linux 中显示错误的日期和时间
- python - 优化我的分形编码神经网络的建议
- python - 检查表的特定列在python中是否为空,其中整个表内容存储在变量中
- azure - azure iot hub 如何订阅设备孪生更改作为服务器
- vue.js - vuejs orderby 属性值在计算返回 9 个项目
- python - Sympy 自动为 Derivatives 创建变量
- python - python:解析 XML 字段
- spring - spring bean 属性的默认值在 spring 5 中不起作用
- java - 消息丢失或消息未被消费
- c++ - 在源代码 (.cpp) 中搜索/查找非常量静态变量