跳到主要內容

[Pandas教學]快速掌握Pandas套件讀寫SQLite資料庫的重要方法

pandas_and_sqlite
Photo by Mia Baker on Unsplash
好不容易蒐集到所需的大量資料,經過一連串的資料清理格式化排序篩選等前置操作,為了後續的應用及分析,想必都會寫入資料庫中來留存,Pandas套件當然也提供了相關的方法(Method),讓開發人員除了可以將Pandas DataFrame中的資料存入資料庫外,相對的,也能夠透過SQL語法讀取資料庫中的資料

本文就以Kaggle網站的2021年富比士億萬富翁資料集(Billionaire.csv)為例,模擬如何將Pandas DataFrame中的資料存入SQLite資料庫,以及透過自訂SQL語法來讀取資料庫的資料。重點包含:

  • 建立SQLite資料庫與資料表
  • Pandas DataFrame存入SQLite資料庫
  • Pandas DataFrame讀取SQLite資料庫

一、建立SQLite資料庫與資料表

SQLite是一個免費的輕量型關聯式資料庫,相較於其它大型的企業級資料庫,無需伺服端的安裝,就可以在用戶端直接使用,對於小型的應用程式非常適合

除此之外,Python也內建了SQLite模組(Module),在專案中直接引用即可,如下範例

import sqlite3
而Pandas套件則需利用以下指令安裝

$ pip install pandas
才能夠在專案中進行引用,如下範例
import pandas as pd
import sqlite3
接著,就可以透過Pandas套件的read_csv()方法(Method),來讀取下載下來的資料集了,如下範例
import pandas as pd
import sqlite3


df = pd.read_csv('Billionaire.csv')  #讀取CSV資料集檔案
print(df)
執行結果
pandas_and_sqlite
其中,包含了Name(姓名)、NetWorth(淨值)、Country(國家)、收入來源(Source)及排名(Rank)欄位。而要將Pandas DataFrame中的資料存入SQLite資料庫,就需要先建立資料庫與資料表,這時候利用sqlite3模組(Module)即可達成,如下範例
import pandas as pd
import sqlite3


df = pd.read_csv('Billionaire.csv')  #讀取CSV資料集檔案

conn = sqlite3.connect('billionaire.db')  #建立資料庫
cursor = conn.cursor()
cursor.execute('CREATE TABLE Billionaire(Name, NetWorth, Country, Source, Rank)')  #建立資料表
conn.commit()
以上的動作說明如下:
  • connect()-同時建立資料庫與連線
  • cursor()-建立資料庫操作指標
  • execute()-執行新增資料表的SQL指令
  • commit()-確認完成
而要檢查是否建立成功,可以下載DB Browser for SQLite工具,安裝完成開啟後如下圖:
pandas_and_sqlite
點擊「打開資料庫」,選擇剛剛所建立的SQLite資料庫檔(billionaire.db),就可以看到其中的資料表(Billionaire),如下圖:
pandas_and_sqlite

二、Pandas DataFrame存入SQLite資料庫

有了資料庫與資料表後,利用Pandas DataFrame的to_sql()方法(Method),就能夠將資料寫入SQLite資料庫,如下範例
import pandas as pd
import sqlite3


df = pd.read_csv('Billionaire.csv')  #讀取CSV資料集檔案

conn = sqlite3.connect('billionaire.db')  #建立資料庫
cursor = conn.cursor()
cursor.execute('CREATE TABLE Billionaire(Name, NetWorth, Country, Source, Rank)')  #建立資料表
conn.commit()

#如果資料表存在,就寫入資料,否則建立資料表
df.to_sql('Billionaire', conn, if_exists='append', index=False) 
以上的Pandas DataFrame的to_sql()方法(Method)包含4個關鍵字參數(Keyword Argument),分別為「寫入的資料表名稱」、連線資料表已存在該如何操作是否寫入Pandas DataFrame索引值,而其中的「if_exists='append'」意思就是資料表已存在,則將資料直接寫入

開啟DB Browser for SQLite工具,選擇Billionaire資料表後,切換到Browse Data(瀏覽資料)頁籤,即可看到Pandas DataFrame中的資料成功寫入,如下圖:

pandas_and_sqlite

三、Pandas DataFrame讀取SQLite資料庫

相反的,Pandas DataFrame想要讀取SQLite資料庫中的資料,Pandas套件也提供了read_sql()方法(Method),透過傳入SQL指令來進行撈取,如下範例
import pandas as pd
import sqlite3


df = pd.read_csv('Billionaire.csv')  #讀取CSV資料集檔案

conn = sqlite3.connect('billionaire.db')  #建立資料庫
cursor = conn.cursor()
cursor.execute('CREATE TABLE Billionaire(Name, NetWorth, Country, Source, Rank)')  #建立資料表
conn.commit()

#如果資料表存在,就寫入資料,否則建立資料表
df.to_sql('Billionaire', conn, if_exists='append', index=False) 

#透過SQL語法讀取資料庫中的資料
us_df = pd.read_sql("SELECT * FROM Billionaire WHERE Country='United States'", conn)
print(us_df)
執行結果
pandas_and_sqlite
以上範例,Pandas DataFrame就是透過SQL指令,讀取資料庫中國家(Country)欄位為美國(United States)的資料

此外,這也提供了開發人員另一個資料篩選的方式,也就是利用SQL指令從資料庫篩選出所需的資料後,再讀入Pandas DataFrame中來進行操作分析。

四、小結

在實作資料分析的過程中,除了檔案的讀寫外,資料庫的讀寫也是非常重要的技巧之一,Pandas套件也提供了很好的支援,本文就以Pandas讀寫SQLite資料庫為例,來示範其中的to_sql()及read_sql()方法(Method)應用,如果大家在分析實務上有與資料庫的結合需求,希望本文能夠幫助到你

喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

Python學習資源

Python網頁爬蟲推薦課程
Pandas資料分析教學









留言

  1. 看到你的文章就馬上來試試看了,內容淺顯易懂。

    不過我有遇到一個問題,我在猜是否是路徑有錯誤?

    我在Jupyter上執行建立資料庫之後,到 DB Browser上看卻沒有看到東西,但在Jupyter內繼續執行寫入跟讀取,仍然可以成功。 想問在這方面的問題是否有可以參考的解決辦法?

    回覆刪除

張貼留言