亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Pandas使用SQLite3實(shí)戰(zhàn)

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

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

1 環(huán)境準(zhǔn)備

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

pip install pandas

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

基礎(chǔ)用法:讀取整個(gè)表

import pandas as pd
import sqlite3

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

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

# 關(guān)閉連接
conn.close()

高級(jí)用法:篩選和聚合

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

3 將 DataFrame 寫(xiě)入 SQLite3

基本寫(xiě)入(全量覆蓋)

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

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

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

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

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

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

id,name,age,email
1, Alice,30,alice@example.com
2, Bob , invalid, bob@example.com  # 錯(cuò)誤年齡
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')  # 無(wú)效年齡轉(zhuǎn)為 NaN
df = df.dropna(subset=['age'])                        # 刪除年齡無(wú)效的行
df['email'] = df['email'].fillna('unknown')            # 填充缺失郵箱
df['name'] = df['name'].str.strip()                   # 去除名字前后空格

print(df)

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

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

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

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

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

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

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

Pandas 雖然強(qiáng)大,但復(fù)雜查詢?nèi)孕柚苯硬僮?SQL:

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

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

# 執(zhí)行復(fù)雜查詢(連接 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ù)類型匹配問(wèn)題

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

    • Pandas 不會(huì)自動(dòng)創(chuàng)建主鍵或索引,需提前用 SQL 語(yǔ)句定義表結(jié)構(gòu)。
  • 性能瓶頸

    • 寫(xiě)入大量數(shù)據(jù)時(shí),關(guān)閉事務(wù)自動(dòng)提交可提速:
      with conn:
          df.to_sql(...)  # 使用上下文管理器自動(dòng)提交
      

8 總結(jié)

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

下一步建議

  • 嘗試將 Excel/CSV 文件自動(dòng)同步到 SQLite3 數(shù)據(jù)庫(kù)。
  • 學(xué)習(xí)使用 sqlalchemy 庫(kù)增強(qiáng) SQL 操作能力。

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

相關(guān)文章

  • 關(guān)于Python下載大文件時(shí)哪種方式速度更快

    關(guān)于Python下載大文件時(shí)哪種方式速度更快

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

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

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

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

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

    詳解Python time庫(kù)的使用

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

    pyqt5簡(jiǎn)介及安裝方法介紹

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

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

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

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

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

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

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

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

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

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

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

最新評(píng)論