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