You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

连接Kaggle加州交通事故数据表时遇'database or disk is full'错误的解决方法

问题描述

使用加州交通事故数据集,尝试通过case_id关联parties表与collisions表,仅筛选collision_date ≥ "2020-01-01"的行,执行以下代码:

import sqlite3
import pandas as pd

con = sqlite3.connect("../switrs.sqlite")

df_sqllite = pd.read_sql_query('SELECT * FROM parties JOIN collisions USING (case_id) WHERE collision_date >= "2020-01-01"', con)

出现错误:

DatabaseError: Execution failed on sql 'SELECT * FROM parties JOIN collisions USING (case_id) WHERE collision_date >= "2020-01-01"': database or disk is full

解决办法
  • 检查并释放磁盘空间:用df -h(Linux/macOS)或Windows资源管理器查看磁盘剩余空间,SQLite执行JOIN操作时会生成临时文件,需要足够磁盘空间支撑。删除磁盘上的冗余文件(如旧数据集、缓存文件)释放空间。
  • *避免SELECT ,只查询所需字段:SELECT *会返回所有列,大幅增加数据量。明确指定需要的字段,减少内存和磁盘占用,示例SQL:
    SELECT parties.case_id, collisions.collision_date, parties.party_age, parties.party_sex
    FROM parties
    JOIN collisions USING (case_id)
    WHERE collision_date >= "2020-01-01"
    
  • 分批读取数据:利用pandas的chunksize参数分批加载数据,避免一次性读取过大数据集,示例代码:
    df_chunks = pd.read_sql_query(
        'SELECT parties.case_id, collisions.collision_date FROM parties JOIN collisions USING (case_id) WHERE collision_date >= "2020-01-01"',
        con,
        chunksize=10000
    )
    # 遍历处理每个数据块
    for chunk in df_chunks:
        # 此处添加数据处理逻辑
        print(chunk.head())
    
  • 给筛选字段添加索引:在SQLite中给collisions表的collision_date字段创建索引,加快筛选效率,减少临时文件生成:
    CREATE INDEX idx_collision_date ON collisions(collision_date);
    
    执行完索引创建后再运行查询语句。

内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:20:27