it编程 > 数据库 > MsSqlserver

Pandas使用SQLite3实战

42人参与 2025-04-02 MsSqlserver

让数据分析更高效!用 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 避坑指南

数据类型匹配问题

8 总结

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

下一步建议

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

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

如何使用SQL对物流数据进行跟踪和查询

04-01

SQLManagementStudio工具的高级功能和SQL开发技巧

04-01

SQLMaestro工具的数据库备份和恢复及SQL执行

04-02

Navicat工具的多数据库连接和批量执行SQL语句的方法

04-02

Nginx处理Web请求机制的方法详解

04-01

nginx文件上传限制以及超时无响应问题的解决

04-01

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论