我想用我创建的脚本为学生创建一份报告. 我想要一个逻辑,将迭代在学生和重新运行我的脚本时,新学生的名字检测到.

student_name,gender,subject,marks
Mark,M,english,90
         biology,80
         chemistry,77
         physics,89 
George,M,french,81
         biology,66
         chemistry,82
         physics,79
         economic,57
Lisa,F,german,77
         biology,89
         chemistry,90
         physics,92
         economic,96

enter image description here

例如: 对于马克,脚本将运行到第5行,即最后一个主题. 对于乔治, playbook 将重新运行到第10行,即最后一个主题. 以此类推,对许多学生来说.

我们如何才能做到这一点并打印出学生的名字?

如果学生的详细信息在CSV中单独存在于所有学生的目录中,我已经实现了这一点,但如果它在单个文件中,我如何实现这一点.

推荐答案

Update

您可以修复CSV文件:

def read_csv(filename):
    with open('marks.csv') as fp:
        buf = io.StringIO()
        header = fp.readline()
        num_col = headers.count(',')
        buf.writelines(header)
        for row in fp:
            diff = num_col - row.count(',')
            buf.writelines(','*diff + row.lstrip())
        buf.seek(0)
    return pd.read_csv(buf).ffill()

df = read_csv('marks.csv')
# Use the loop with groupby

IIUC,你要找的是groupby.

假设以下文件marks.csv:

student_name,gender,subject,marks
Mark,M,english,90
Mark,M,biology,80
Mark,M,chemistry,77
Mark,M,physics,89
George,M,french,81
George,M,biology,66
George,M,chemistry,82
George,M,physics,79
George,M,economic,57
Lisa,F,german,77
Lisa,F,biology,89
Lisa,F,chemistry,90
Lisa,F,physics,92
Lisa,F,economic,96

您可以执行以下操作:

df = pd.read_csv('marks.csv')
for name, subdf in df.groupby('student_name', sort=False):
    print(f"[{name}]")
    print(subdf, end='\n\n')
    # Do stuff here

输出:

[Mark]
  student_name gender    subject  marks
0         Mark      M    english     90
1         Mark      M    biology     80
2         Mark      M  chemistry     77
3         Mark      M    physics     89

[George]
  student_name gender    subject  marks
4       George      M     french     81
5       George      M    biology     66
6       George      M  chemistry     82
7       George      M    physics     79
8       George      M   economic     57

[Lisa]
   student_name gender    subject  marks
9          Lisa      F     german     77
10         Lisa      F    biology     89
11         Lisa      F  chemistry     90
12         Lisa      F    physics     92
13         Lisa      F   economic     96

更多关于groupby:Group by: split-apply-combine的内容

Python相关问答推荐

FastAPI:使用APIRouter路由子模块功能

获取Azure Pipelines以从pyproject.toml(而不是relevments_dev.文本)安装测试环境

如何在telegram 机器人中发送音频?

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

使文本输入中的文本与标签中的文本相同

如何在Python中使用io.BytesIO写入现有缓冲区?

即使在可见的情况下也不相互作用

TARete错误:类型对象任务没有属性模型'

使用新的类型语法正确注释ParamSecdecorator (3.12)

试图找到Python方法来部分填充numpy数组

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

如何让程序打印新段落上的每一行?

ODE集成中如何终止solve_ivp的无限运行

优化器的运行顺序影响PyTorch中的预测

所有列的滚动标准差,忽略NaN

Asyncio:如何从子进程中读取stdout?

在Python中,从给定范围内的数组中提取索引组列表的更有效方法

在matplotlib中删除子图之间的间隙_mosaic

以逻辑方式获取自己的pyproject.toml依赖项