最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)雜查詢(xún)?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ù)雜查詢(xún)(連接 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ù)類(lèi)型匹配問(wèn)題

  • SQLite 默認(rèn)所有列為 TEXT,但 Pandas 會(huì)自動(dòng)推斷類(lèi)型。
  • 寫(xiě)入時(shí)可用 dtype 參數(shù)手動(dòng)指定類(lèi)型:
    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)文章

  • Python中json常見(jiàn)四種用法舉例

    Python中json常見(jiàn)四種用法舉例

    這篇文章主要給大家介紹了關(guān)于Python中json常見(jiàn)四種用法舉例的相關(guān)資料,眾所周知JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 詳解python中的生成器、迭代器、閉包、裝飾器

    詳解python中的生成器、迭代器、閉包、裝飾器

    這篇文章主要介紹了python中的生成器、迭代器、閉包、裝飾器的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python模塊之StringIO使用示例

    python模塊之StringIO使用示例

    這篇文章主要介紹了python模塊之StringIO使用示例,本文直接給出示例代碼,需要的朋友可以參考下
    2015-04-04
  • Python下載的11種姿勢(shì)(小結(jié))

    Python下載的11種姿勢(shì)(小結(jié))

    這篇文章主要介紹了Python下載的11種姿勢(shì)(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python?+?Streamlit項(xiàng)目部署方案超詳細(xì)教程(非Docker版)

    Python?+?Streamlit項(xiàng)目部署方案超詳細(xì)教程(非Docker版)

    Streamlit是一款強(qiáng)大的Python框架,專(zhuān)為機(jī)器學(xué)習(xí)及數(shù)據(jù)可視化打造,這篇文章主要介紹了Python?+?Streamlit項(xiàng)目部署方案(非Docker版)的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • Python 實(shí)現(xiàn)簡(jiǎn)單的客戶(hù)端認(rèn)證

    Python 實(shí)現(xiàn)簡(jiǎn)單的客戶(hù)端認(rèn)證

    這篇文章主要介紹了Python 如何實(shí)現(xiàn)簡(jiǎn)單的客戶(hù)端認(rèn)證,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Python實(shí)現(xiàn)npy/mat文件的保存與讀取

    Python實(shí)現(xiàn)npy/mat文件的保存與讀取

    除了常用的csv文件和excel文件之外,我們還可以通過(guò)Python把數(shù)據(jù)保存文npy文件格式和mat文件格式。本文為大家展示了實(shí)現(xiàn)npy文件與mat文件的保存與讀取的示例代碼,需要的可以參考一下
    2022-04-04
  • Python的線程之線程同步

    Python的線程之線程同步

    這篇文章主要為大家介紹了Python線程同步,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • Python調(diào)用百度AI實(shí)現(xiàn)人像分割詳解

    Python調(diào)用百度AI實(shí)現(xiàn)人像分割詳解

    本文主要介紹了如何通過(guò)Python調(diào)用百度AI從而實(shí)現(xiàn)人像的分割與合成,文中的示例代碼對(duì)我們的工作或?qū)W習(xí)有一定的幫助,需要的朋友可以參考一下
    2021-12-12
  • python Cartopy的基礎(chǔ)使用詳解

    python Cartopy的基礎(chǔ)使用詳解

    這篇文章主要介紹了python Cartopy的基礎(chǔ)使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

保康县| 无锡市| 科技| 丹阳市| 巩义市| 呼伦贝尔市| 杂多县| 正镶白旗| 壤塘县| 济宁市| 深泽县| 廊坊市| 松原市| 秦皇岛市| 宁南县| 阿拉善右旗| 顺义区| 阜新| 襄汾县| 三江| 静海县| 大荔县| 新巴尔虎左旗| 石林| 云林县| 扎鲁特旗| 阳春市| 托克托县| 托里县| 金山区| 阳原县| 林西县| 乳山市| 烟台市| 宜君县| 三明市| 商河县| 平遥县| 固原市| 赤峰市| 安阳县|