sqlite 데이터베이스를 pandas 데이터프레임으로 열고 변환하는 방법
sqlite 데이터베이스(data.db)로 몇 가지 데이터를 다운로드했는데 이 데이터베이스를 python에서 열고 팬더 데이터 프레임으로 변환하고 싶습니다.
여기까지입니다.
import sqlite3
import pandas
dat = sqlite3.connect('data.db') #connected to database with out error
pandas.DataFrame.from_records(dat, index=None, exclude=None, columns=None, coerce_float=False, nrows=None)
하지만 이 오류를 던져주고 있습니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 980, in from_records
coerce_float=coerce_float)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 5353, in _to_arrays
if not len(data):
TypeError: object of type 'sqlite3.Connection' has no len()
sqlite 데이터베이스를 pandas 데이터프레임으로 변환하는 방법
sqlite는 Python Standard Library의 일부이며 SQLite 데이터베이스에 대한 쉽고 좋은 인터페이스임에도 불구하고 Pandas 튜토리얼은 다음과 같이 설명합니다.
참고 read_sql_table()을 사용하려면 SQL Lchemy 옵션 종속성이 설치되어 있어야 합니다.
그러나 SQLAlchemy를 설치하지 않으려면 Pandas는 여전히 sqlite3 액세스를 지원합니다.
import sqlite3
import pandas as pd
# Create your connection.
cnx = sqlite3.connect('file.db')
df = pd.read_sql_query("SELECT * FROM table_name", cnx)
여기에 명시되어 있지만, 사용한 테이블의 이름을 미리 알아야 합니다.
선을
data = sqlite3.connect('data.db')
데이터베이스에 대한 연결을 엽니다.여기까지 조회된 기록이 없습니다.그래서 당신은 나중에 질의를 실행해서 팬더들에게 이것을 제공해야 합니다.DataFrame
시공자
이것과 비슷하게 보여야 합니다.
import sqlite3
import pandas as pd
dat = sqlite3.connect('data.db')
query = dat.execute("SELECT * From <TABLENAME>")
cols = [column[0] for column in query.description]
results= pd.DataFrame.from_records(data = query.fetchall(), columns = cols)
나는 SQL 명령어에 대해 잘 모르니 당신은 쿼리의 정확성을 확인해야 합니다. 당신의 데이터베이스에 있는 테이블의 이름이 되어야 합니다.
테이블 이름을 모르는 상태에서 sqlite.db를 데이터 프레임 사전으로 구문 분석:
def read_sqlite(dbfile):
import sqlite3
from pandas import read_sql_query, read_sql_table
with sqlite3.connect(dbfile) as dbcon:
tables = list(read_sql_query("SELECT name FROM sqlite_master WHERE type='table';", dbcon)['name'])
out = {tbl : read_sql_query(f"SELECT * from {tbl}", dbcon) for tbl in tables}
return out
서치sqlalchemy
,engine
구글의 데이터베이스 이름(이 경우 sqlite):
import pandas as pd
import sqlalchemy
db_name = "data.db"
table_name = "LITTLE_BOBBY_TABLES"
engine = sqlalchemy.create_engine("sqlite:///%s" % db_name, execution_options={"sqlite_raw_colnames": True})
df = pd.read_sql_table(table_name, engine)
나는 .sqlite나 .db와 같은 데이터베이스 파일에 테이블을 저장하고 그 중에서 각 테이블을 시트로 하여 엑셀 파일을 만들거나 개별 테이블을 csv로 만드는 코드를 작성했습니다.
참고: 테이블 이름을 미리 알 필요는 없습니다!
import os, fnmatch
import sqlite3
import pandas as pd
#creates a directory without throwing an error
def create_dir(dir):
if not os.path.exists(dir):
os.makedirs(dir)
print("Created Directory : ", dir)
else:
print("Directory already existed : ", dir)
return dir
#finds files in a directory corresponding to a regex query
def find(pattern, path):
result = []
for root, dirs, files in os.walk(path):
for name in files:
if fnmatch.fnmatch(name, pattern):
result.append(os.path.join(root, name))
return result
#convert sqlite databases(.db,.sqlite) to pandas dataframe(excel with each table as a different sheet or individual csv sheets)
def save_db(dbpath=None,excel_path=None,csv_path=None,extension="*.sqlite",csvs=True,excels=True):
if (excels==False and csvs==False):
print("Atleast one of the parameters need to be true: csvs or excels")
return -1
#little code to find files by extension
if dbpath==None:
files=find(extension,os.getcwd())
if len(files)>1:
print("Multiple files found! Selecting the first one found!")
print("To locate your file, set dbpath=<yourpath>")
dbpath = find(extension,os.getcwd())[0] if dbpath==None else dbpath
print("Reading database file from location :",dbpath)
#path handling
external_folder,base_name=os.path.split(os.path.abspath(dbpath))
file_name=os.path.splitext(base_name)[0] #firstname without .
exten=os.path.splitext(base_name)[-1] #.file_extension
internal_folder="Saved_Dataframes_"+file_name
main_path=os.path.join(external_folder,internal_folder)
create_dir(main_path)
excel_path=os.path.join(main_path,"Excel_Multiple_Sheets.xlsx") if excel_path==None else excel_path
csv_path=main_path if csv_path==None else csv_path
db = sqlite3.connect(dbpath)
cursor = db.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
tables = cursor.fetchall()
print(len(tables),"Tables found :")
if excels==True:
#for writing to excel(xlsx) we will be needing this!
try:
import XlsxWriter
except ModuleNotFoundError:
!pip install XlsxWriter
if (excels==True and csvs==True):
writer = pd.ExcelWriter(excel_path, engine='xlsxwriter')
i=0
for table_name in tables:
table_name = table_name[0]
table = pd.read_sql_query("SELECT * from %s" % table_name, db)
i+=1
print("Parsing Excel Sheet ",i," : ",table_name)
table.to_excel(writer, sheet_name=table_name, index=False)
print("Parsing CSV File ",i," : ",table_name)
table.to_csv(os.path.join(csv_path,table_name + '.csv'), index_label='index')
writer.save()
elif excels==True:
writer = pd.ExcelWriter(excel_path, engine='xlsxwriter')
i=0
for table_name in tables:
table_name = table_name[0]
table = pd.read_sql_query("SELECT * from %s" % table_name, db)
i+=1
print("Parsing Excel Sheet ",i," : ",table_name)
table.to_excel(writer, sheet_name=table_name, index=False)
writer.save()
elif csvs==True:
i=0
for table_name in tables:
table_name = table_name[0]
table = pd.read_sql_query("SELECT * from %s" % table_name, db)
i+=1
print("Parsing CSV File ",i," : ",table_name)
table.to_csv(os.path.join(csv_path,table_name + '.csv'), index_label='index')
cursor.close()
db.close()
return 0
save_db();
한다면data.db
SQLite 데이터베이스와table_name
는 테이블 중 하나입니다. 그러면 다음 작업을 수행할 수 있습니다.
import pandas as pd
df = pd.read_sql_table('table_name', 'sqlite:///data.db')
다른 수입품은 필요 없습니다.
데이터를 데이터베이스에 저장했습니다.sqlite 테이블 이름은 Reviews입니다.
import sqlite3
con=sqlite3.connect("database.sqlite")
data=pd.read_sql_query("SELECT * FROM Reviews",con)
print(data)
언급URL : https://stackoverflow.com/questions/36028759/how-to-open-and-convert-sqlite-database-to-pandas-dataframe
'source' 카테고리의 다른 글
로드된 영상에 대한 jQuery 이벤트 (0) | 2023.10.06 |
---|---|
마리아에 대한 wpcli를 통해 사용자의 암호 설정DB (0) | 2023.10.06 |
__libc_start_main에서 무슨 일이 일어나고 있는 거지? (0) | 2023.10.06 |
스키마와 테이블, 데이터베이스의 차이점은 무엇입니까? (0) | 2023.10.06 |
앵귤러 부츠 스트랩 모달이 배경을 열어 둡니다. (0) | 2023.10.06 |