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

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

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

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

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ù)庫
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()

高級用法:篩選和聚合

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 寫入 SQLite3

基本寫入(全量覆蓋)

# 創(chuàng)建一個(gè)示例 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 實(shí)戰(zhàn)場景:數(shù)據(jù)清洗 + 入庫

假設(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')  # 無效年齡轉(zhuǎn)為 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')
    
    # 驗(yàn)證寫入結(jié)果
    df_check = pd.read_sql('SELECT * FROM cleaned_users', conn)
    print(df_check)

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

處理超大型數(shù)據(jù)時(shí)(如 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:
        # 對每個(gè)塊做簡單處理
        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 雖然強(qiáng)大,但復(fù)雜查詢?nèi)孕柚苯硬僮?SQL:

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

# 寫入 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ù)類型匹配問題

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

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

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

8 總結(jié)

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

下一步建議

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

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

相關(guān)文章

  • Python中json常見四種用法舉例

    Python中json常見四種用法舉例

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

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

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

    python模塊之StringIO使用示例

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

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

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

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

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

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

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

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

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

    Python的線程之線程同步

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

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

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

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

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

最新評論

遂昌县| 鹤山市| 台北县| 长阳| 江西省| 隆子县| 黑龙江省| 泸州市| 泰兴市| 韩城市| 易门县| 湟源县| 买车| 陈巴尔虎旗| 伊金霍洛旗| 永新县| 大足县| 抚远县| 景宁| 浮梁县| 秦安县| 聂荣县| 南阳市| 峨山| 金塔县| 都匀市| 伊金霍洛旗| 西城区| 苏尼特右旗| 耒阳市| 伊金霍洛旗| 四子王旗| 青田县| 鄄城县| 汨罗市| 江口县| 图木舒克市| 仁怀市| 东山县| 黔西| 鄂托克旗|