File size: 4,688 Bytes
9c7e08b dd89b11 de2ad46 245a9b5 9c7e08b 5c9b782 ab18789 dd89b11 9c7e08b dd89b11 9c7e08b 795a6d7 e1f40de 795a6d7 dd89b11 795a6d7 dd89b11 42712b2 795a6d7 faa4887 7443266 88f31b2 978080b 56ac316 faa4887 637112e 42712b2 795a6d7 9c7e08b 88f31b2 795a6d7 9c7e08b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
import streamlit as st
import pandas as pd
def load_contest_file(upload, helper = None, sport = None):
if sport == 'MLB':
pos_list = [' P ', ' C ', '1B ', ' 2B ', ' 3B ', ' SS ', ' OF ']
if upload is not None:
try:
try:
if upload.name.endswith('.csv'):
raw_df = pd.read_csv(upload)
elif upload.name.endswith(('.xls', '.xlsx')):
raw_df = pd.read_excel(upload)
else:
st.error('Please upload either a CSV or Excel file')
return None
except:
raw_df = upload
if helper is not None:
helper_df = helper
# Select and rename essential columns for the actual upload
if helper is None:
df = raw_df[['EntryId', 'EntryName', 'TimeRemaining', 'Points', 'Lineup', 'Player', 'Roster Position', '%Drafted', 'FPTS', 'Salary', 'Team']]
else:
df = raw_df[['EntryId', 'EntryName', 'TimeRemaining', 'Points', 'Lineup', 'Player', 'Roster Position', '%Drafted', 'FPTS']]
df = df.rename(columns={'Roster Position': 'Pos', '%Drafted': 'Own'})
# Split EntryName into base name and entry count
df['BaseName'] = df['EntryName'].str.replace(r'\s*\(\d+/\d+\)$', '', regex=True)
df['EntryCount'] = df['EntryName'].str.extract(r'\((\d+/\d+)\)')
df['EntryCount'] = df['EntryCount'].fillna('1/1') # Default to 1/1 if no entry count
# Convert ownership percentage to float
try:
df['Own'] = df['Own'].str.replace('%', '').astype(float)
except:
df['Own'] = df['Own'].astype(float)
# Select and rename essential columns for the actual upload
if helper is not None:
df_helper = helper_df[['EntryId', 'EntryName', 'TimeRemaining', 'Points', 'Lineup', 'Player', 'Roster Position', '%Drafted', 'FPTS', 'Salary', 'Team']]
df_helper = df_helper.rename(columns={'Roster Position': 'Pos', '%Drafted': 'Own'})
# Split EntryName into base name and entry count
df_helper['BaseName'] = df_helper['EntryName'].str.replace(r'\s*\(\d+/\d+\)$', '', regex=True)
df_helper['EntryCount'] = df_helper['EntryName'].str.extract(r'\((\d+/\d+)\)')
df_helper['EntryCount'] = df_helper['EntryCount'].fillna('1/1') # Default to 1/1 if no entry count
# Convert ownership percentage to float
try:
df_helper['Own'] = df_helper['Own'].str.replace('%', '').astype(float)
except:
df_helper['Own'] = df_helper['Own'].astype(float)
# Create separate dataframes for different player attributes
if helper is not None:
ownership_df = df[['Player', 'Own']]
fpts_df = df[['Player', 'FPTS']]
salary_df = df_helper[['Player', 'Salary']]
team_df = df_helper[['Player', 'Team']]
pos_df = df[['Player', 'Pos']]
else:
ownership_df = df[['Player', 'Own']]
fpts_df = df[['Player', 'FPTS']]
salary_df = df[['Player', 'Salary']]
team_df = df[['Player', 'Team']]
pos_df = df[['Player', 'Pos']]
# Create the cleaned dataframe with just the essential columns
cleaned_df = df[['BaseName', 'Lineup']]
cleaned_df['Lineup'] = cleaned_df['Lineup'].replace(pos_list, value=',', regex=True)
check_lineups = cleaned_df.copy()
cleaned_df[['Remove', '1B', '2B', '3B', 'C', 'OF1', 'OF2', 'OF3', 'P1', 'P2', 'SS']] = cleaned_df['Lineup'].str.split(',', expand=True)
cleaned_df = cleaned_df.drop(columns=['Lineup', 'Remove'])
entry_counts = cleaned_df['BaseName'].value_counts()
cleaned_df['EntryCount'] = cleaned_df['BaseName'].map(entry_counts)
cleaned_df = cleaned_df[['BaseName', 'EntryCount', 'P1', 'P2', 'C', '1B', '2B', '3B', 'SS', 'OF1', 'OF2', 'OF3']]
# Get unique entry names
entry_list = list(set(df['BaseName']))
entry_list.sort()
return cleaned_df, ownership_df, fpts_df, salary_df, team_df, pos_df, entry_list, check_lineups
except Exception as e:
st.error(f'Error loading file: {str(e)}')
return None
return None |