편집 기록

편집 기록
  • 프로필 엽토군님의 편집
    날짜2019.09.06

    pandas DataFrame SQLite3 변환에 관하여


    안녕하세요. 여럿 구글링 해보고 시도해보고 있는데, 이 부분에 막혀서 질문드립니다. 아래와 같이 리스트를 2개 생성하고, pd.cutvalue_counts()를 이용해서 범주를 생성하여 해당 범위 안에 들어간 값의 수량을 파악하는 DataFrame을 만들었습니다. 그리고 이 DataFrame을 db파일로 저장하기 위해 변환을 하는 과정에서 계속 오류가 발생하네요. 일반적으로 DataFrame은 db파일로 저장이 가능한데, 범주형은 db파일로 변환이 안 되는지 의문입니다.

    변환이 안 되는 이유와 방법 좀 알려주세요:(

    오류 내용 :

    Traceback (most recent call last):
      File "C:/Users/lajet/Desktop/New Version/Exam_2.py", line 74, in <module>
        df.to_sql('test2', conn, if_exists="append")
      File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\core\generic.py", line 2531, in to_sql
        dtype=dtype, method=method)
      File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 460, in to_sql
        chunksize=chunksize, dtype=dtype, method=method)
      File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 1547, in to_sql
        table.insert(chunksize, method)
      File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 686, in insert
        exec_insert(conn, keys, chunk_iter)
      File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 1319, in _execute_insert
        conn.executemany(self.insert_statement(), data_list)
    sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.
    
        import sqlite3 as sq
        import pandas as pd
    
        conn = sq.connect('test.db')
        cur = conn.cursor()
    
        list1 = (1, 1, 2, 4, 6, 5, 3, 12, 11, 12, 11, 9, 10, 8, 6, 6, 7)
        list2 = (1, 3, 6, 9, 12)
    
        _cut = pd.cut(list1, list2)
        df = _cut.value_counts()
        df = df.to_frame()
        df = df.reset_index()
        df.columns = ['range', 'unit']
    
        # sql로 변환하는 과정에서 오류 발생!
        df.to_sql('test', conn)
    
        cur.execute("SECLECT * FROM test")
        rows = cur.fetchall()
        for row in rows:
            print(row)
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2019.09.06

    pandas DataFrame SQLite3 변환에 관하여


    안녕하세요. 여럿 구글링 해보고 시도해보고 있는데, 이 부분에 막혀서 질문드립니다. 아래와 같이 리스트를 2개 생성하고, pd.cut과 value_counts()를 이용해서 범주를 생성하여 해당 범위 안에 들어간 값의 수량을 파악하는 DataFrame을 만들었습니다. 그리고 이 DataFrame을 db파일로 저장하기 위해 변환을 하는 과정에서 계속 오류가 발생하네요. 일반적으로 DataFrame은 db파일로 저장이 가능한데, 범주형은 db파일로 변환이 안 되는지 의문입니다.

    변환이 안 되는 이유와 방법 좀 알려주세요:(

    오류 내용 :

    Traceback (most recent call last): File "C:/Users/lajet/Desktop/New Version/Exam_2.py", line 74, in df.to_sql('test2', conn, if_exists="append") File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\core\generic.py", line 2531, in to_sql dtype=dtype, method=method) File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 460, in to_sql chunksize=chunksize, dtype=dtype, method=method) File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 1547, in to_sql table.insert(chunksize, method) File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 686, in insert exec_insert(conn, keys, chunk_iter) File "C:\Users\lajet\Anaconda3\envs\BP3\lib\site-packages\pandas\io\sql.py", line 1319, in _execute_insert conn.executemany(self.insert_statement(), data_list) sqlite3.InterfaceError: Error binding parameter 1 - probably unsupported type.

    import sqlite3 as sq
    import pandas as pd
    
    conn = sq.connect('test.db')
    cur = conn.cursor()
    
    list1 = (1, 1, 2, 4, 6, 5, 3, 12, 11, 12, 11, 9, 10, 8, 6, 6, 7)
    list2 = (1, 3, 6, 9, 12)
    
    _cut = pd.cut(list1, list2)
    df = _cut.value_counts()
    df = df.to_frame()
    df = df.reset_index()
    df.columns = ['range', 'unit']
    
    # sql로 변환하는 과정에서 오류 발생!
    df.to_sql('test', conn)
    
    cur.execute("SECLECT * FROM test")
    rows = cur.fetchall()
    for row in rows:
        print(row)