好不容易蒐集到所需的大量資料,經過一連串的資料清理、格式化、排序與篩選等前置操作,為了後續的應用及分析,想必都會寫入資料庫中來留存,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)
執行結果
其中,包含了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 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 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 DataFrame就是透過SQL指令,讀取資料庫中國家(Country)欄位為美國(United States)的資料。
此外,這也提供了開發人員另一個資料篩選的方式,也就是利用SQL指令從資料庫篩選出所需的資料後,再讀入Pandas DataFrame中來進行操作分析。
四、小結
在實作資料分析的過程中,除了檔案的讀寫外,資料庫的讀寫也是非常重要的技巧之一,Pandas套件也提供了很好的支援,本文就以Pandas讀寫SQLite資料庫為例,來示範其中的to_sql()及read_sql()方法(Method)應用,如果大家在分析實務上有與資料庫的結合需求,希望本文能夠幫助到你。
喜歡我的文章,別忘了在下面訂閱本網站,以及幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊
Python網頁爬蟲推薦課程
Pandas資料分析教學
- [Pandas教學]輕鬆入門3個常見的Pandas套件排序資料方式
- [Pandas教學]有效利用Pandas套件篩選資料的應用技巧
- [Pandas教學]善用Pandas套件的Groupby與Aggregate方法提升資料解讀效率
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(上)
- [Pandas教學]使用Pandas套件實作資料清理的必備觀念(下)
- Visual Studio Code漂亮印出Pandas DataFrame資料的實用方法
- [Pandas教學]資料視覺化必懂的Pandas套件繪製Matplotlib分析圖表實戰
- [Pandas教學]5個實用的Pandas讀取Excel檔案資料技巧
- 解析Python網頁爬蟲如何有效整合Pandas套件提升資料處理效率
- [Pandas教學]掌握Pandas DataFrame讀取網頁表格的實作技巧
- [Pandas教學]資料分析必懂的Pandas DataFrame處理雙維度資料方法
- [Pandas教學]資料分析必懂的Pandas Series處理單維度資料方法
看到你的文章就馬上來試試看了,內容淺顯易懂。
回覆刪除不過我有遇到一個問題,我在猜是否是路徑有錯誤?
我在Jupyter上執行建立資料庫之後,到 DB Browser上看卻沒有看到東西,但在Jupyter內繼續執行寫入跟讀取,仍然可以成功。 想問在這方面的問題是否有可以參考的解決辦法?