Моя первая программа на Питоне
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Моя первая программа на Питоне
# 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)
# 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)
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Моя первая программа на Питоне
Действительно, 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']]= '....'
Отцы-дети-наследование. Без пузыря хрестьянину на старости лет трудно разобраться
Но чтобы всеми фунциями и методами правильно и комфортно пользоваться, желательно знать и чуЙствовать концепцию OOP
Типа:
df
df[ ].dropna( ).dropna( )
header_loc = df[ ].dropna( ).dropna( )
row = header_loc.index.item()
df.loc[( ), ['Flag']] = '....'
df.loc[duplicate_row_index, ['Flag']]= '....'
Отцы-дети-наследование. Без пузыря хрестьянину на старости лет трудно разобраться
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 607
- Joined: 17 Dec 2009 11:27
Re: Моя первая программа на Питоне
Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
-
- Уже с Приветом
- Posts: 64661
- Joined: 12 Jul 2002 16:38
- Location: г.Москва, ул. Б. Лубянка, д.2
Re: Моя первая программа на Питоне
сколько времени рожал?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)
-
- Уже с Приветом
- Posts: 15760
- Joined: 01 Mar 2008 15:14
Re: Моя первая программа на Питоне
так а в чем вопрос?
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Моя первая программа на Питоне
всю субботу и воскресенье парился. Но всё работает как часики
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Подправил мальца
+1. Будем вместе Питон учить
Подправил код мальца. Теперь входной файл может как иметь, так и не иметь мусорные 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)
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Моя первая программа на Питоне
Благодарствую, вы всегда даёте полезные советыAndrey Strelnikov wrote: ↑26 Oct 2021 19:21 Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 607
- Joined: 17 Dec 2009 11:27
Re: Моя первая программа на Питоне
Что-то там народу набежало ... почти полмиллиона уже. Вся Индия метнулась похоже.kyk wrote: ↑29 Oct 2021 00:09Благодарствую, вы всегда даёте полезные советыAndrey Strelnikov wrote: ↑26 Oct 2021 19:21 Вон на курсере новый курс сделали - https://www.coursera.org/professional-c ... automation - на Питоне
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Моя первая программа на Питоне
это хорошо или плохо?
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 607
- Joined: 17 Dec 2009 11:27
Re: Моя первая программа на Питоне
Думаю перпендикулярно.
Их всех в гугль не возьмут Чтобы они там себе не думали.
Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
я как-то брал МФТИ шный курс по комбинаторике - там отвечали на вопросы оперативно.
-
- Уже с Приветом
- Posts: 31438
- Joined: 21 Nov 2004 05:12
- Location: камбуз на кампусе
Re: Моя первая программа на Питоне
Вы имеете ввиду каждому индивидуально на его собственный вопрос? Или просто раздать ответы на стандартные вопросы?Andrey Strelnikov wrote: ↑29 Oct 2021 13:23Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
Лучше переесть, чем недоспать! © Обратное тоже верно
-
- Уже с Приветом
- Posts: 607
- Joined: 17 Dec 2009 11:27
Re: Моя первая программа на Питоне
Вроде там было что-то типа форума на курсере. Но в любом случае это не такой важный критерий по этой теме средней сложности.kyk wrote: ↑29 Oct 2021 13:34Вы имеете ввиду каждому индивидуально на его собственный вопрос? Или просто раздать ответы на стандартные вопросы?Andrey Strelnikov wrote: ↑29 Oct 2021 13:23Но вот как будет организованы ответы на вопросы пользователей? Кто им всем сможет ответить?
Не бином Ньютона доказывают. Вот на том курсе доказывали посредством комбинаторики.