Я хочу создать отчет для студентов с помощью сценария, который я создал. Мне нужна логика, которая будет перебирать учеников и повторно запускать мой сценарий при обнаружении новых имен учеников.
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
Например: Для Марка скрипт будет работать до 5-й строки, т.е. до последней темы. Для Джорджа сценарий будет повторяться до 10-й строки, т.е. последней темы. и так далее для многих студентов.
Как мы можем добиться этого и напечатать имя студента?
Я добился этого, если сведения о студентах представлены в csv отдельно в каталоге для всех студентов, но как я могу добиться этого, если они находятся в одном файле.
Обновлять
Вы можете исправить свой 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
: Сгруппировать по: разделить-применить-объединить
Имя и пол имеют только одну первую строку, под ней пустые ячейки. Я обновил вопрос, сэр.
@Аноним. Я обновил свой ответ. Я создаю пользовательскую функцию read_csv
для исправления формата. Можете ли вы проверить это, пожалуйста?
Я искал эту логику. Спасибо!!
Что вы хотите точно создать столбец с первым, вторым... темами или? Пожалуйста, уточните свой вопрос и не делитесь своими данными в качестве образца данных для обмена изображениями, которые мы можем использовать.