Pandas使用SQLite3实战

 更新时间:2025年04月02日 10:09:04   作者:老哥不老  
本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

让数据分析更高效!用 Pandas 直接读写 SQLite3 数据,告别手动拼接 SQL 语句!

1 环境准备

确保已安装 pandas 和 sqlite3(前者需单独安装,后者是 Python 内置):

pip install pandas

2 从 SQLite3 读取数据到 DataFrame

基础用法:读取整个表

import pandas as pd
import sqlite3

# 连接到数据库
conn = sqlite3.connect('test.db')

# 读取 users 表到 DataFrame
df = pd.read_sql('SELECT * FROM users', conn)
print(df.head())  # 查看前5行数据

# 关闭连接
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

基本写入(全量覆盖)

# 创建一个示例 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,         # 数据库连接
    if_exists='replace',  # 如果表存在,直接替换(慎用!)
    index=False       # 不保存 DataFrame 的索引列
)
conn.commit()

追加数据(增量写入)

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

4 实战场景:数据清洗 + 入库

假设有一个 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 清洗数据

# 读取 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:写入数据库

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 性能优化:分块写入大数据

处理超大型数据时(如 10 万行),避免一次性加载到内存:

# 分块读取 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'])
        # 分块写入数据库
        chunk.to_sql(
            name='big_table',
            con=conn,
            if_exists='append',  # 追加模式
            index=False
        )
    print("全部写入完成!")

6 高级技巧:直接执行 SQL 操作

Pandas 虽然强大,但复杂查询仍需直接操作 SQL:

# 创建临时 DataFrame
df = pd.DataFrame({'product': ['A', 'B', 'C'], 'price': [10, 200, 150]})

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

# 执行复杂查询(连接 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 避坑指南

数据类型匹配问题

  • SQLite 默认所有列为 TEXT,但 Pandas 会自动推断类型。
  • 写入时可用 dtype 参数手动指定类型:
    df.to_sql('table', conn, dtype={'age': 'INTEGER', 'price': 'REAL'})
    
  • 主键和索引

    • Pandas 不会自动创建主键或索引,需提前用 SQL 语句定义表结构。
  • 性能瓶颈

    • 写入大量数据时,关闭事务自动提交可提速:
      with conn:
          df.to_sql(...)  # 使用上下文管理器自动提交
      

8 总结

通过 Pandas + SQLite3 的组合,你可以:
✅ 快速导入/导出数据:告别手动拼接 SQL 语句。
✅ 无缝衔接数据分析:清洗、计算、可视化后直接入库。
✅ 处理海量数据:分块读写避免内存爆炸。

下一步建议

  • 尝试将 Excel/CSV 文件自动同步到 SQLite3 数据库。
  • 学习使用 sqlalchemy 库增强 SQL 操作能力。

到此这篇关于Pandas使用SQLite3实战的文章就介绍到这了,更多相关Pandas使用SQLite3内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 关于Python下载大文件时哪种方式速度更快

    关于Python下载大文件时哪种方式速度更快

    这篇文章主要介绍了关于Python下载大文件时哪种方式速度更快,通常,我们都会用 requests 库去下载,这个库用起来太方便了,需要的朋友可以参考下
    2023-04-04
  • PyQt5根据控件Id获取控件对象的方法

    PyQt5根据控件Id获取控件对象的方法

    今天小编就为大家分享一篇PyQt5根据控件Id获取控件对象的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python pycharm最新版本激活码(永久有效)附python安装教程

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

    PyCharm是一个多功能的集成开发环境,只需要在pycharm中创建python file就运行python,并且pycharm内置完备的功能,这篇文章给大家介绍python pycharm激活码最新版,需要的朋友跟随小编一起看看吧
    2020-01-01
  • 详解Python time库的使用

    详解Python time库的使用

    这篇文章主要介绍了Python time库的使用,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • pyqt5简介及安装方法介绍

    pyqt5简介及安装方法介绍

    这篇文章主要介绍了pyqt5简介及安装方法介绍,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python实现批量提取Word中的表格

    Python实现批量提取Word中的表格

    表格在word文档中常见的文档元素之一,操作word文件时有时需要提取文件中多个表格的内容到一个新的文件,本文给大家分享两种批量提取文档中表格的两种方法,希望对大家有所帮助
    2024-02-02
  • python抓取最新博客内容并生成Rss

    python抓取最新博客内容并生成Rss

    本文给大家分享的是使用python抓取最新博客内容并生成Rss的代码,主要用到了PyRSS2Gen方法,非常的简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • openCV实现图像融合的示例代码

    openCV实现图像融合的示例代码

    图像融合是两幅图片叠加在一起,本文主要介绍了openCV实现图像融合的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Python字符串中如何去除数字之间的逗号

    Python字符串中如何去除数字之间的逗号

    这篇文章主要介绍了Python字符串中如何去除数字之间的逗号,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • python traceback捕获并打印异常的方法

    python traceback捕获并打印异常的方法

    这篇文章主要介绍了python traceback捕获并打印异常的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论