2017-10-18 8 views
1

나는 많은 양의 .csv 파일을 sqlite 데이터베이스에 넣고 싶습니다. 대부분의 파일에는 동일한 열 이름이 있지만 여분의 열이있는 파일이 있습니다.다른 열 이름을 가진 csv 파일에서 sqlite 테이블 만들기

내가되고 해봤 코드 (변경 제네릭 예정) :

OperationalError: table X has no column named ColumnZ

:이 테이블 X에없는 열이있는 파일을 발견

import os  
import pandas as pd 
import sqlite3 

conn = sqlite3.connect('test.db') 
cur = conn.cursor() 

os.chdir(dir) 
for file in os.listdir(dir): 
    df = pd.read_csv(file) 
    df.to_sql('X', conn, if_exists = 'append') 

내가 오류

코드를 변경하여 테이블을 새 열로 추가하고 이전 행을 NaN으로 채우려면 어떻게해야합니까? 모든 DataFrames가 RAM에 맞지 않으면

답변

0

, 당신은이 작업을 수행 할 수 있습니다

import glob 

files = glob.glob(r'/path/to/csv_files/*.csv') 

df = pd.concat([pd.read_csv(f) for f in files], ignore_index=True) 
df.to_sql('X', conn, if_exists = 'replace') 

데모 :

In [22]: d1 
Out[22]: 
    a b 
0 0 1 
1 2 3 

In [23]: d2 
Out[23]: 
    a b c 
0 1 2 3 
1 4 5 6 

In [24]: d3 
Out[24]: 
    x b 
0 11 12 
1 13 14 

In [25]: pd.concat([d1,d2,d3], ignore_index=True) 
Out[25]: 
    a b c  x 
0 0.0 1 NaN NaN 
1 2.0 3 NaN NaN 
2 1.0 2 3.0 NaN 
3 4.0 5 6.0 NaN 
4 NaN 12 NaN 11.0 
5 NaN 14 NaN 13.0 

이 또는 당신이 목록으로 모든 열을 저장하고 루프에서 확인하실 수 있습니다 새 DF에 추가 열이 있는지 여부 및 SQLite ALTER TABLE statement :

을 사용하여 해당 열을 SQLite DB에 추가할지 여부
+0

불행히도 모든 파일을 RAM에 저장할 수 없습니다. 나는 당신의 방법을 좋아하지만, 청크 메쏘드를 사용하고 각각의'df.to_sql' 후에 RAM을 비우기 위해'df'를 덤프하는 방법이 있습니까? 나는'del df'를 시도했지만 RAM을 해제하지는 않습니다. –