Моя первая программа на Питоне

User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Моя первая программа на Питоне

Post by kyk »

# tested with Python 3.9.7 (not working with the 3.10)
# python -m pip install --upgrade pip
# python -m pip install --upgrade --force-reinstall pip
# pip install pandas # run NON-elevated CMD!
# pip install xlrd openpyxl # run NON-elevated CMD!


# Rename the input file to "Failed_Prereqs.xlsx"
# Do not forget do delete all extra top rows above the header raw !!!!
# Place file "Failed_Prereqs.xlsx" to the same folder as the Python file "deregister.py"

import pandas as pd

# un-hide rows and columns
pd.set_option('max_columns', None)
pd.set_option('max_rows', None)
# Set column width, passing an int (or put at the max passing None)
# pd.set_option('max_colwidth', None)

filename = 'Failed_Prereqs.xlsx'
#sheet = 'Sheet1'

df = pd.read_excel(filename, nrows=20)

# Finding the actual header row by searching for the first appearance of string 'Last Name'
header_loc = df[df == 'Last Name'].dropna(axis=1, how='all').dropna(how='all')
row = header_loc.index.item()

# Creating the new dataframe while skipping the rows preceeding the actual header row, which is equvalent to the trancation of the original file
df = pd.read_excel(filename, skiprows=row+1)
df.to_excel("Truncated_Un-hidden.xlsx", index=False)


# Unmerging: replace the cell's value with the previous value. This will fill all na cells. Even if it is not merged
df['Subject'] = df['Subject'].fillna(method='ffill')
df['Course'] = df['Course'].fillna(method='ffill')

# df.to_excel("Unmergedcls.xlsx", index=False)

# Find what the duplicate were
# in file_df.duplicated, by setting keep=False, all duplicates are set to True, so all will be kept in the list

duplicate_row_index = df.duplicated(subset=["Subject", "Course", "ID"], keep=False)
all_duplicate_rows = df[duplicate_row_index]
all_duplicate_rows.to_excel("All_Duplicate_Rows.xlsx", index=False)

df.insert(1, "Flag", "")

# Note that 'Course' variable type appears to be integer, so 312 is without quotes
# Boolean constants like False are also without quotes
# add more course conditions here:
df.loc[(df['Subject'] == 'CP') & ( (df['Course'] == 312) | (df['Course'] == 317) ), ['Flag']] = 'Not deregister!'

df.loc[duplicate_row_index, ['Flag']]= 'Failed 2 prereqs'

df.to_excel("Deregister.xlsx", index=False)
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Моя первая программа на Питоне

Post by kyk »

Действительно, Panda таки заточена для работы с Excel (и по слухам Google) sheets.

Но чтобы всеми фунциями и методами правильно и комфортно пользоваться, желательно знать и чуЙствовать концепцию OOP
Типа:
df
df[ ].dropna( ).dropna( )
header_loc = df[ ].dropna( ).dropna( )
row = header_loc.index.item()

df.loc[( ), ['Flag']] = '....'

df.loc[duplicate_row_index, ['Flag']]= '....'

Отцы-дети-наследование. Без пузыря хрестьянину на старости лет трудно разобраться
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
Andrey Strelnikov
Уже с Приветом
Posts: 744
Joined: 17 Dec 2009 11:27

Re: Моя первая программа на Питоне

Post by Andrey Strelnikov »

Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Моя первая программа на Питоне

Post by Komissar »

kyk wrote: 25 Oct 2021 18:50 # tested with Python 3.9.7 (not working with the 3.10)
# python -m pip install --upgrade pip
# python -m pip install --upgrade --force-reinstall pip
# pip install pandas # run NON-elevated CMD!
# pip install xlrd openpyxl # run NON-elevated CMD!


# Rename the input file to "Failed_Prereqs.xlsx"
# Do not forget do delete all extra top rows above the header raw !!!!
# Place file "Failed_Prereqs.xlsx" to the same folder as the Python file "deregister.py"

import pandas as pd

# un-hide rows and columns
pd.set_option('max_columns', None)
pd.set_option('max_rows', None)
# Set column width, passing an int (or put at the max passing None)
# pd.set_option('max_colwidth', None)

filename = 'Failed_Prereqs.xlsx'
#sheet = 'Sheet1'

df = pd.read_excel(filename, nrows=20)

# Finding the actual header row by searching for the first appearance of string 'Last Name'
header_loc = df[df == 'Last Name'].dropna(axis=1, how='all').dropna(how='all')
row = header_loc.index.item()

# Creating the new dataframe while skipping the rows preceeding the actual header row, which is equvalent to the trancation of the original file
df = pd.read_excel(filename, skiprows=row+1)
df.to_excel("Truncated_Un-hidden.xlsx", index=False)


# Unmerging: replace the cell's value with the previous value. This will fill all na cells. Even if it is not merged
df['Subject'] = df['Subject'].fillna(method='ffill')
df['Course'] = df['Course'].fillna(method='ffill')

# df.to_excel("Unmergedcls.xlsx", index=False)

# Find what the duplicate were
# in file_df.duplicated, by setting keep=False, all duplicates are set to True, so all will be kept in the list

duplicate_row_index = df.duplicated(subset=["Subject", "Course", "ID"], keep=False)
all_duplicate_rows = df[duplicate_row_index]
all_duplicate_rows.to_excel("All_Duplicate_Rows.xlsx", index=False)

df.insert(1, "Flag", "")

# Note that 'Course' variable type appears to be integer, so 312 is without quotes
# Boolean constants like False are also without quotes
# add more course conditions here:
df.loc[(df['Subject'] == 'CP') & ( (df['Course'] == 312) | (df['Course'] == 317) ), ['Flag']] = 'Not deregister!'

df.loc[duplicate_row_index, ['Flag']]= 'Failed 2 prereqs'

df.to_excel("Deregister.xlsx", index=False)
сколько времени рожал?
User avatar
OtherSide
Уже с Приветом
Posts: 17361
Joined: 01 Mar 2008 15:14

Re: Моя первая программа на Питоне

Post by OtherSide »

так а в чем вопрос?
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Моя первая программа на Питоне

Post by kyk »

Komissar wrote: 26 Oct 2021 19:34 сколько времени рожал?
всю субботу и воскресенье парился. Но всё работает как часики
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
User avatar
Komissar
Уже с Приветом
Posts: 65206
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Моя первая программа на Питоне

Post by Komissar »

kyk wrote: 26 Oct 2021 20:49
Komissar wrote: 26 Oct 2021 19:34 сколько времени рожал?
всю субботу и воскресенье парился.
Жениться вам надо, сударь!
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Подправил мальца

Post by kyk »

Komissar wrote: 26 Oct 2021 21:10 Жениться вам надо, сударь!
+1. Будем вместе Питон учить :good:

Подправил код мальца. Теперь входной файл может как иметь, так и не иметь мусорные rows сверЬху реального header row

Code: Select all

# tested with Python 3.9.7 (not working with the 3.10)
# python -m pip install --upgrade pip
# python -m pip install --upgrade --force-reinstall pip
# pip install pandas  # run NON-elevated CMD!
# pip install xlrd openpyxl  # run NON-elevated CMD!
# pip install pyinstaller


# Rename the input file to "Failed_Prereqs.xlsx"
# Do not forget do delete all extra top raws above the header raw !!!!
# Place file "Failed_Prereqs.xlsx" to the same folder as the Python file "deregister.py"

import pandas as pd

# un-hide rows and columns
pd.set_option('max_columns', None)
pd.set_option('max_rows', None)
# Set column width, passing an int (or put at the max passing None)
# pd.set_option('max_colwidth', None)

filename = 'Failed_Prereqs.xlsx'
#sheet = 'Sheet1'

# Open the Excel file while treating the 1st row as a regular row (not the header), so as if no header
df = pd.read_excel(filename, header=None, nrows=20)

# Finding the actual header row by searching for the first appearance  of  string 'Last Name'
header_loc = df[df == 'Last Name'].dropna(axis=1, how='all').dropna(how='all')
row = header_loc.index.item()

# Creating the new dataframe while skipping the rows preceeding the actual  header row, which is equvalent to the trancation of the original file
df = pd.read_excel(filename, skiprows=row)
df.to_excel("Truncated_Un-hidden.xlsx", index=False)


# Unmerging: replace the cell's value with the previous value. This will fill all na cells. Even if it is not merged
df['Subject'] = df['Subject'].fillna(method='ffill')
df['Course'] = df['Course'].fillna(method='ffill')

# df.to_excel("Unmergedcls.xlsx", index=False)

# Find what the duplicate were
# in file_df.duplicated, by setting keep=False, all duplicates are set to True, so all will be  kept in the list

duplicate_row_index = df.duplicated(subset=["Subject", "Course", "ID"], keep=False)
all_duplicate_rows = df[duplicate_row_index]
all_duplicate_rows.to_excel("All_Duplicate_Rows.xlsx", index=False)

df.insert(1, "Flag", "")

# Note that 'Course' variable type appears to be integer, so 312 is without quotes
# Boolean constants like False are also without quotes
# add more course contitions here:
df.loc[(df['Subject'] == 'CP') & ( (df['Course'] == 312) | (df['Course'] == 317) ), ['Flag']] =  'Not deregister!'

df.loc[duplicate_row_index, ['Flag']]= 'Failed 2 prereqs'

df.to_excel("Deregister.xlsx", index=False)
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Моя первая программа на Питоне

Post by kyk »

Andrey Strelnikov wrote: 26 Oct 2021 19:21 Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
Благодарствую, вы всегда даёте полезные советы :good:
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
Andrey Strelnikov
Уже с Приветом
Posts: 744
Joined: 17 Dec 2009 11:27

Re: Моя первая программа на Питоне

Post by Andrey Strelnikov »

kyk wrote: 29 Oct 2021 00:09
Andrey Strelnikov wrote: 26 Oct 2021 19:21 Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
Благодарствую, вы всегда даёте полезные советы :good:
Что-то там народу набежало ... почти полмиллиона уже. Вся Индия метнулась похоже.
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Моя первая программа на Питоне

Post by kyk »

Andrey Strelnikov wrote: 29 Oct 2021 09:37Что-то там народу набежало ... почти полмиллиона уже.
это хорошо или плохо?
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
Andrey Strelnikov
Уже с Приветом
Posts: 744
Joined: 17 Dec 2009 11:27

Re: Моя первая программа на Питоне

Post by Andrey Strelnikov »

kyk wrote: 29 Oct 2021 09:53
Andrey Strelnikov wrote: 29 Oct 2021 09:37Что-то там народу набежало ... почти полмиллиона уже.
это хорошо или плохо?
Думаю перпендикулярно.

Их всех в гугль не возьмут :) Чтобы они там себе не думали.

Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
я как-то брал МФТИ шный курс по комбинаторике - там отвечали на вопросы оперативно.
User avatar
kyk
Уже с Приветом
Posts: 31438
Joined: 21 Nov 2004 05:12
Location: камбуз на кампусе

Re: Моя первая программа на Питоне

Post by kyk »

Andrey Strelnikov wrote: 29 Oct 2021 13:23Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
Вы имеете ввиду каждому индивидуально на его собственный вопрос? Или просто раздать ответы на стандартные вопросы?
Лучше переесть, чем недоспать! © Обратное тоже верно :umnik1:
Andrey Strelnikov
Уже с Приветом
Posts: 744
Joined: 17 Dec 2009 11:27

Re: Моя первая программа на Питоне

Post by Andrey Strelnikov »

kyk wrote: 29 Oct 2021 13:34
Andrey Strelnikov wrote: 29 Oct 2021 13:23Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
Вы имеете ввиду каждому индивидуально на его собственный вопрос? Или просто раздать ответы на стандартные вопросы?
Вроде там было что-то типа форума на курсере. Но в любом случае это не такой важный критерий по этой теме средней сложности.
Не бином Ньютона доказывают. Вот на том курсе доказывали посредством комбинаторики.

Return to “Вопросы и новости IT”