欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas使用SQLite3實戰(zhàn)

 更新時間:2025年04月02日 10:09:04   作者:老哥不老  
本文主要介紹了Pandas使用SQLite3實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

讓數(shù)據(jù)分析更高效!用 Pandas 直接讀寫 SQLite3 數(shù)據(jù),告別手動拼接 SQL 語句!

1 環(huán)境準備

確保已安裝 pandas 和 sqlite3(前者需單獨安裝,后者是 Python 內(nèi)置):

pip install pandas

2 從 SQLite3 讀取數(shù)據(jù)到 DataFrame

基礎用法:讀取整個表

import pandas as pd
import sqlite3

# 連接到數(shù)據(jù)庫
conn = sqlite3.connect('test.db')

# 讀取 users 表到 DataFrame
df = pd.read_sql('SELECT * FROM users', conn)
print(df.head())  # 查看前5行數(shù)據(jù)

# 關閉連接
conn.close()

高級用法:篩選和聚合

query = '''
    SELECT 
        name, 
        AVG(age) as avg_age   -- 計算平均年齡
    FROM users 
    WHERE age > 20 
    GROUP BY name
'''
df = pd.read_sql(query, conn)
print(df)

3 將 DataFrame 寫入 SQLite3

基本寫入(全量覆蓋)

# 創(chuàng)建一個示例 DataFrame
data = {
    'name': ['David', 'Eve'],
    'age': [28, 32],
    'email': ['david@test.com', 'eve@test.com']
}
df = pd.DataFrame(data)

# 寫入到 users 表(全量覆蓋)
df.to_sql(
    name='users',     # 表名
    con=conn,         # 數(shù)據(jù)庫連接
    if_exists='replace',  # 如果表存在,直接替換(慎用?。?
    index=False       # 不保存 DataFrame 的索引列
)
conn.commit()

追加數(shù)據(jù)(增量寫入)

df.to_sql(
    name='users',
    con=conn,
    if_exists='append',  # 追加到現(xiàn)有表
    index=False
)
conn.commit()

4 實戰(zhàn)場景:數(shù)據(jù)清洗 + 入庫

假設有一個 CSV 文件 dirty_data.csv,需要清洗后存入 SQLite3:

id,name,age,email
1, Alice,30,alice@example.com
2, Bob , invalid, bob@example.com  # 錯誤年齡
3, Charlie,35,missing_email

步驟 1:用 Pandas 清洗數(shù)據(jù)

# 讀取 CSV
df = pd.read_csv('dirty_data.csv')

# 清洗操作
df['age'] = pd.to_numeric(df['age'], errors='coerce')  # 無效年齡轉為 NaN
df = df.dropna(subset=['age'])                        # 刪除年齡無效的行
df['email'] = df['email'].fillna('unknown')            # 填充缺失郵箱
df['name'] = df['name'].str.strip()                   # 去除名字前后空格

print(df)

步驟 2:寫入數(shù)據(jù)庫

with sqlite3.connect('test.db') as conn:
    # 寫入新表 cleaned_users
    df.to_sql('cleaned_users', conn, index=False, if_exists='replace')
    
    # 驗證寫入結果
    df_check = pd.read_sql('SELECT * FROM cleaned_users', conn)
    print(df_check)

5 性能優(yōu)化:分塊寫入大數(shù)據(jù)

處理超大型數(shù)據(jù)時(如 10 萬行),避免一次性加載到內(nèi)存:

# 分塊讀取 CSV(每次讀 1 萬行)
chunk_iter = pd.read_csv('big_data.csv', chunksize=1000)

with sqlite3.connect('big_db.db') as conn:
    for chunk in chunk_iter:
        # 對每個塊做簡單處理
        chunk['timestamp'] = pd.to_datetime(chunk['timestamp'])
        # 分塊寫入數(shù)據(jù)庫
        chunk.to_sql(
            name='big_table',
            con=conn,
            if_exists='append',  # 追加模式
            index=False
        )
    print("全部寫入完成!")

6 高級技巧:直接執(zhí)行 SQL 操作

Pandas 雖然強大,但復雜查詢?nèi)孕柚苯硬僮?SQL:

# 創(chuàng)建臨時 DataFrame
df = pd.DataFrame({'product': ['A', 'B', 'C'], 'price': [10, 200, 150]})

# 寫入 products 表
df.to_sql('products', conn, index=False, if_exists='replace')

# 執(zhí)行復雜查詢(連接 users 和 orders 表)
query = '''
    SELECT 
        u.name,
        p.product,
        p.price
    FROM users u
    JOIN orders o ON u.id = o.user_id
    JOIN products p ON o.product_id = p.id
    WHERE p.price > 10
'''
result_df = pd.read_sql(query, conn)
print(result_df)

7 避坑指南

數(shù)據(jù)類型匹配問題

  • SQLite 默認所有列為 TEXT,但 Pandas 會自動推斷類型。
  • 寫入時可用 dtype 參數(shù)手動指定類型:
    df.to_sql('table', conn, dtype={'age': 'INTEGER', 'price': 'REAL'})
    
  • 主鍵和索引

    • Pandas 不會自動創(chuàng)建主鍵或索引,需提前用 SQL 語句定義表結構。
  • 性能瓶頸

    • 寫入大量數(shù)據(jù)時,關閉事務自動提交可提速:
      with conn:
          df.to_sql(...)  # 使用上下文管理器自動提交
      

8 總結

通過 Pandas + SQLite3 的組合,你可以:
快速導入/導出數(shù)據(jù):告別手動拼接 SQL 語句。
無縫銜接數(shù)據(jù)分析:清洗、計算、可視化后直接入庫。
處理海量數(shù)據(jù):分塊讀寫避免內(nèi)存爆炸。

下一步建議

  • 嘗試將 Excel/CSV 文件自動同步到 SQLite3 數(shù)據(jù)庫。
  • 學習使用 sqlalchemy 庫增強 SQL 操作能力。

到此這篇關于Pandas使用SQLite3實戰(zhàn)的文章就介紹到這了,更多相關Pandas使用SQLite3內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家! 

相關文章

  • 關于Python下載大文件時哪種方式速度更快

    關于Python下載大文件時哪種方式速度更快

    這篇文章主要介紹了關于Python下載大文件時哪種方式速度更快,通常,我們都會用 requests 庫去下載,這個庫用起來太方便了,需要的朋友可以參考下
    2023-04-04
  • PyQt5根據(jù)控件Id獲取控件對象的方法

    PyQt5根據(jù)控件Id獲取控件對象的方法

    今天小編就為大家分享一篇PyQt5根據(jù)控件Id獲取控件對象的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python pycharm最新版本激活碼(永久有效)附python安裝教程

    python pycharm最新版本激活碼(永久有效)附python安裝教程

    PyCharm是一個多功能的集成開發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧
    2020-01-01
  • 詳解Python time庫的使用

    詳解Python time庫的使用

    這篇文章主要介紹了Python time庫的使用,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • pyqt5簡介及安裝方法介紹

    pyqt5簡介及安裝方法介紹

    這篇文章主要介紹了pyqt5簡介及安裝方法介紹,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python實現(xiàn)批量提取Word中的表格

    Python實現(xiàn)批量提取Word中的表格

    表格在word文檔中常見的文檔元素之一,操作word文件時有時需要提取文件中多個表格的內(nèi)容到一個新的文件,本文給大家分享兩種批量提取文檔中表格的兩種方法,希望對大家有所幫助
    2024-02-02
  • python抓取最新博客內(nèi)容并生成Rss

    python抓取最新博客內(nèi)容并生成Rss

    本文給大家分享的是使用python抓取最新博客內(nèi)容并生成Rss的代碼,主要用到了PyRSS2Gen方法,非常的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • openCV實現(xiàn)圖像融合的示例代碼

    openCV實現(xiàn)圖像融合的示例代碼

    圖像融合是兩幅圖片疊加在一起,本文主要介紹了openCV實現(xiàn)圖像融合的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Python字符串中如何去除數(shù)字之間的逗號

    Python字符串中如何去除數(shù)字之間的逗號

    這篇文章主要介紹了Python字符串中如何去除數(shù)字之間的逗號,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python traceback捕獲并打印異常的方法

    python traceback捕獲并打印異常的方法

    這篇文章主要介紹了python traceback捕獲并打印異常的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08

最新評論