import io import pandas as pd import streamlit as st def df_info(df): df.columns = df.columns.str.replace(' ', '_') buffer = io.StringIO() df.info(buf=buffer) s = buffer.getvalue() df_info = s.split('\n') counts = [] names = [] nn_count = [] dtype = [] for i in range(5, len(df_info)-3): line = df_info[i].split() counts.append(line[0]) names.append(line[1]) nn_count.append(line[2]) dtype.append(line[4]) df_info_dataframe = pd.DataFrame(data = {'#':counts, 'Column':names, 'Non-Null Count':nn_count, 'Data Type':dtype}) return df_info_dataframe.drop('#', axis = 1) def df_isnull(df): res = pd.DataFrame(df.isnull().sum()).reset_index() res['Percentage'] = round(res[0] / df.shape[0] * 100, 2) res['Percentage'] = res['Percentage'].astype(str) + '%' return res.rename(columns = {'index':'Column', 0:'Number of null values'}) def number_of_outliers(df): df = df.select_dtypes(exclude = 'object') Q1 = df.quantile(0.25) Q3 = df.quantile(0.75) IQR = Q3 - Q1 ans = ((df < (Q1 - 1.5 * IQR)) | (df > (Q3 + 1.5 * IQR))).sum() df = pd.DataFrame(ans).reset_index().rename(columns = {'index':'column', 0:'count_of_outliers'}) return df def space(num_lines=1): for _ in range(num_lines): st.write("") def sidebar_space(num_lines=1): for _ in range(num_lines): st.sidebar.write("") def sidebar_multiselect_container(massage, arr, key): container = st.sidebar.container() select_all_button = st.sidebar.checkbox("Select all for " + key + " plots") if select_all_button: selected_num_cols = container.multiselect(massage, arr, default = list(arr)) else: selected_num_cols = container.multiselect(massage, arr, default = arr[0]) return selected_num_cols