sql_trainer / make_db.py
seriouspark's picture
fix dtype transformation
b1edd84
raw
history blame contribute delete
No virus
3.22 kB
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()