File size: 5,005 Bytes
9c7e08b
 
 
dd89b11
de2ad46
245a9b5
9c7e08b
 
5c9b782
 
 
 
 
 
 
 
 
ab18789
dd89b11
 
bbf6bb9
 
9c7e08b
dd89b11
 
 
 
 
9c7e08b
bbf6bb9
 
9c7e08b
 
 
 
 
 
795a6d7
e1f40de
 
 
 
bbf6bb9
 
795a6d7
dd89b11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbf6bb9
 
795a6d7
dd89b11
 
 
 
 
 
 
 
 
 
 
 
bbf6bb9
 
42712b2
795a6d7
faa4887
7443266
88f31b2
978080b
56ac316
faa4887
 
637112e
bbf6bb9
 
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
90
91
92
93
94
95
96
97
98
99
100
101
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

            print('Made it through initial upload')
            
            # 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'})

            print('Made it through rename')
            
            # 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)

            print('Made it through ownership conversion')
            
            # 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)
            
            print('Made it through helper')
            
            # 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']]

            print('Made it through dictionaries')
            
            # 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']]

            print('Made it through check_lineups')
            
            # 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