sql_trainer / make_db.py
seriouspark's picture
fix dtype transformation
b1edd84
import streamlit as st
import pandas as pd
import sqlite3
import os
from datetime import datetime
def app():
st.title('Excel to DataBase')
st.write('엑셀을 λ„£μ–΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ§Œλ“€μ–΄λ΄…μ‹œλ‹€.')
file_name = st.text_input('파일λͺ… μ§€μ •ν•˜κΈ°')
# μ—‘μ…€ 파일 μ—…λ‘œλ“œ
uploaded_file = st.file_uploader('Choose an Excel file', type = ['xlsx','xls','csv'])
if uploaded_file is not None:
# μ—‘μ…€ νŒŒμΌμ„ λ°μ΄ν„°ν”„λ ˆμž„μœΌλ‘œ λ³€ν™˜
try:
df = pd.read_csv(uploaded_file)
except:
df = pd.read_excel(uploaded_file)
# 각 열에 λŒ€ν•œ 데이터 νƒ€μž… 선택 μ˜΅μ…˜ 제곡
data_types = {'object': 'String',
'float' : 'Float',
'int' : 'Integer',
'datetime': 'Datetime',
'bool' : 'Bool',
}
selected_data_types = {}
for column in df.columns:
data_type = st.selectbox(f"SELECT data type for column '{column}'",
options = list(data_types.keys()),
format_func = lambda x : data_types[x],
key = column)
selected_data_types[column] = data_type
print(selected_data_types)
# μ›λž˜ int / float 것듀 μ€‘μ—μ„œ object 둜 λ³€ν™˜ν•΄μ•Ό ν•  것듀은 object 둜 λ°”κΎΈμ–΄μ£ΌκΈ°
if st.button('데이터 λ³€ν™˜ν•˜κ³  μ €μž₯ν•˜κΈ°'):
for column, data_type in selected_data_types.items():
if data_type == 'float':
try:
df[column] = df[column].str.replace(',','')
except:
continue
df[column] = pd.to_numeric(df[column], errors = 'coerce')
elif data_type == 'int':
try:
df[column] = df[column].str.replace(',','')
except:
continue
df[column] = pd.to_numeric(df[column].str.replace(',',''), errors = 'coerce').fillna(0).astype(int)
elif data_type == 'datetime':
df[column] = pd.to_datetime(df[column], errors = 'coerce')
elif data_type == 'bool':
df[column] = df[column].astype(bool)
elif data_type == 'object':
df[column] = df[column].astype(str).str.replace('.0','')
next = True
if next:
# sql lite λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 및 생성
conn = sqlite3.connect(file_name)
c = conn.cursor()
# λ°μ΄ν„°ν”„λ ˆμž„μ„ SQLν…Œμ΄λΈ”λ‘œ λ³€ν™˜
df.to_sql(f'{file_name}', conn, if_exists = 'replace', index = False)
st.success(f'νŒŒμΌμ€ μ„±κ³΅μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ‘œ μ €μž₯λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€λͺ… [{file_name}]')
# μ—°κ²° μ’…λ£Œ
conn
conn.close()