csv文件过大怎么打开,csv文件太大不能全部显示

首页 > 实用技巧 > 作者:YD1662023-11-01 07:53:54

假定我们需要找出具有最多病例的州,那么可以将数据集切分为每块 100 行数据,分别处理每个数据块,从这各个小结果中获取最大值。

csv文件过大怎么打开,csv文件太大不能全部显示(9)

本节代码片段如下:

#导入所需软件库 import pandas as pd #数据集 csv = "https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv" #循环处理每个数据块,获取每个数据块中的最大值 result = {} for chunk in pd.read_csv(csv, chunksize=100): max_case = chunk["cases"].max() max_case_county = chunk.loc[chunk['cases'] == max_case, 'county'].iloc[0] result[max_case_county] = max_case #给出结果 print(max(result, key=result.get) , result[max(result, key=result.get)])

代码地址: https://gist.github.com/SaraM92/808ed30694601e5eada5e283b2275ed7#file-chuncking-py

第三种方法:索引

数据分块非常适用于数据集仅加载一次的情况。但如果需要多次加载数据集,那么可以使用索引技术。

索引可理解为一本书的目录。无需读完整本书就可以获取所需得信息。

例如,分块技术非常适用于获取指定州的病例数。编写如下的简单函数,就能实现这一功能。

csv文件过大怎么打开,csv文件太大不能全部显示(10)

索引 vs 分块

分块需读取所有数据,而索引只需读取部分数据。

上面的函数加载了每个分块中的所有行,但我们只关心其中的一个州,这导致大量的额外开销。可使用 Pandas 的数据库操作,例如简单的做法是使用 SQLite 数据库。

首先,需要将 DataFrame 加载到 SQLite 数据库,代码如下:

import sqlite3 csv = "https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv" # 创建新的数据库文件 db = sqlite3.connect("cases.sqlite") # 按块加载 CSV 文件 for c in pd.read_csv(csv, chunksize=100): # 将所有数据行加载到新的数据库表中 c.to_sql("cases", db, if_exists="append") # 为“state”列添加索引 db.execute("CREATE INDEX state ON cases(state)") db.close()

代码地址: https://gist.github.com/SaraM92/5b445d5b56be2d349cdfa988204ff5f3#file-load_into_db-py

为使用数据库,下面需要重写 get_state_info 函数。

csv文件过大怎么打开,csv文件太大不能全部显示(11)

这样可降低内存占用 50%。

小结

处理大规模数据集时常是棘手的事情,尤其在内存无法完全加载数据的情况下。一些解决方案或是耗时,或是耗费财力。毕竟增加资源是最简单直接的解决方案。

但是在资源受限的情况下,可以使用 Pandas 提供的一些功能,降低加载数据集的内存占用。其中的可用技术包括压缩、索引和数据分块。

原文链接:

https://towardsdatascience.com/what-to-do-when-your-data-is-too-big-for-your-memory-65c84c600585

延伸阅读:

关注我并转发此篇文章,私信我“领取资料”,即可免费获得InfoQ价值4999元迷你书,点击文末「了解更多」,即可移步InfoQ官网,获取最新资讯~

上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.