利用SQLite和Pandas提高大型数据集的读取速度

当我们的数据集越来越庞大的时候,读入内存之后会导致溢出,但是你想将它的一部分用 Pandas 进行处理,如果你在某个时间点只是想加载这个数据集的一部分,可以使用分块方法。最佳的解决方法,就是创建一个可供搜索的索引,使用SQLite 就能轻松解决。
第一个方法:分块
来设想一个具体的示例:你要参加某个人口普查,为此,你找到了一个 CSV 文件,里面包含你所在城市每个民众的信息。于是乎你派人去挨门挨户地拜访,邀请特定街道的所有民众参与登记。现在,Pandas 的 DataFrame 对象中有索引,但是必须要将数据读入内存,然而 CSV 文件太大了,内存无法容纳,于是,你想到,可以只载入你关注的记录。这就是第一个方法,进行分块。以分块的方式加载 CSV 文件,并且按照街道名称进行筛选,然后将得到记录并为一体。虽然逐行加载,但是关注的是比较小的子集,所以需要一些开销。比如,对于只有 70k 的数据集,在我的计算机上执行上面的函数,需要 574ms。2020 年杭州市有 1500 万左右民众,挨个街道查找,需要 30s。如果我们只做一次,没关系,如果需要反复做,这种方法并不是最佳。
创建索引对象
索引就是摘要,有这样一种说法:如果你关心它,就能在这里找到大量数据。在我们的示例中,我们想根据街道名称创建索引,于是就可以快速加载登记者所在的街道了。
如果你担心索引数据也会超出内存,那么数据库则能作为保存它们的容器,例如PostgreSQL、MySQL 等数据库都能实现。哦,你不喜欢安装和维护那些讨厌的服务,好吧,SQLite 应运而生了。
SQLite 是一个功能齐全的关系型数据库,它能够像其它数据库一样运行,但是不需要服务器。Pyhton 默认就支持这种数据库。SQLite 将数据保存在独立的文件中,你必须管理一个 SQLite 数据文件,而不是 CSV 文件了。
用 SQLite 存储数据
下面演示一下如何用 Pandas 操作 SQLite:

  1. 将数据载入 SQLite,并创建索引
    SQLite 数据库能够保存多张数据表,首先将 voters.csv 文件的数据载入 SQLite,并保存为 voters.sqlite 文件,在这个文件中,我们创建一个名为 voters 的表。接下来,在 SQLite 中创建街道的索引。
    只需如下操作:虽然我们只创建单个索引,但我们还可以在其他列或多个列上创建其他索引,从而允许我们使用这些列快速搜索数据库。
  2. 重写查询函数
    现在,所有数据都已经载入 SQLite,我们可以按照街道进行检索了。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值