Итерация по определенным строкам csv и повторный запуск кода при обнаружении новой строки после пустой ячейки в первом столбце

Я хочу создать отчет для студентов с помощью сценария, который я создал. Мне нужна логика, которая будет перебирать учеников и повторно запускать мой сценарий при обнаружении новых имен учеников.

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

Итерация по определенным строкам csv и повторный запуск кода при обнаружении новой строки после пустой ячейки в первом столбце

Например: Для Марка скрипт будет работать до 5-й строки, т.е. до последней темы. Для Джорджа сценарий будет повторяться до 10-й строки, т.е. последней темы. и так далее для многих студентов.

Как мы можем добиться этого и напечатать имя студента?

Я добился этого, если сведения о студентах представлены в csv отдельно в каталоге для всех студентов, но как я могу добиться этого, если они находятся в одном файле.

Что вы хотите точно создать столбец с первым, вторым... темами или? Пожалуйста, уточните свой вопрос и не делитесь своими данными в качестве образца данных для обмена изображениями, которые мы можем использовать.

Elkhan 31.03.2023 12:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновлять

Вы можете исправить свой 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: Сгруппировать по: разделить-применить-объединить

Имя и пол имеют только одну первую строку, под ней пустые ячейки. Я обновил вопрос, сэр.

Anonymous 31.03.2023 13:46

@Аноним. Я обновил свой ответ. Я создаю пользовательскую функцию read_csv для исправления формата. Можете ли вы проверить это, пожалуйста?

Corralien 31.03.2023 15:19

Я искал эту логику. Спасибо!!

Anonymous 31.03.2023 16:20

Другие вопросы по теме