再见 CSV,速度提升 150 倍!

简介: 我的原计划是输出100个,目前来看可能最终不一定会到100个,但每个都是超实用且平时经常会遇到的问题。pandas的用法太多了,如果不熟练,平时是需要经常网上查找的,这个系列可以帮助大家快速回忆用法。

我的原计划是输出100个,目前来看可能最终不一定会到100个,但每个都是超实用且平时经常会遇到的问题。pandas的用法太多了,如果不熟练,平时是需要经常网上查找的,这个系列可以帮助大家快速回忆用法。或者万一平时遇到问题查不到无法解决,也可以过来看下,毕竟某度上是查不到微信文章的。该系列预计25-30篇文章的时候,东哥会总结成第一版的PDF电子版,方便大家使用。剩下来的继续更新迭代版本。


为什么要和CSV再见?


好了说了那么久,来介绍下为什么要和CSV再见。其实也谈不上彻底再见吧,日常还是要用的,这里再介绍一个更加高效的数据格式。用Python处理数据时保存和加载文件属于日常操作了,尤其面对大数据量时我们一般都会保存成CSV格式,而不是Excel。一是因为Excel有最大行数1048576的限制,二是文件占用空间更大,保存和加载速度很慢。虽然用CSV没有行数限制,相对轻便,但是面对大数据量时还是略显拉夸,百万数据量储存加载时也要等好久。。不过很多同学都借此机会抻抻懒腰、摸摸鱼,充分利用时间也不错。其实,CSV 并不是唯一的数据存储格式。今天和大家介绍一个速度超快、更加轻量级的二进制格式保存格式:feather


Feather是什么?


Feather 是一种用于存储数据帧的数据格式。它最初是为了 PythonR 之间快速交互而设计的,初衷很简单,就是尽可能高效地完成数据在内存中转换的效率。现在 Feather 也不仅限于 PythonR 了,基本每种主流的编程语言中都可以用 Feather 文件。不过,要说明下,它的数据格式并不是为长期存储而设计的,一般的短期存储。


如何在Python中操作Feather?


Python 中,可以通过 pandasFeather 两种方式操作。首先需要安装feather-format

# pip 
pip install feather -format 
# Anaconda 
conda install -c conda-forgefeather-format

只需要上面一行安装即可,很简单。我们通过一个较大的数据集举例,需要 FeatherNumpypandas 来一起配合。数据集有 5 列和 1000 万行随机数。

import feather
import numpy as np
import pandas as pd
np.random.seed = 42
df_size = 10000000
df = pd.DataFrame({
    'a': np.random.rand(df_size),
    'b': np.random.rand(df_size),
    'c': np.random.rand(df_size),
    'd': np.random.rand(df_size),
    'e': np.random.rand(df_size)
})
df.head()


0.png

image.gif它的用法和之前csv的操作难度一个水平线,非常简单。


保存


两种方式,一是 DataFrame 直接to_featherFeather 格式:

df.to_feather('1M.feather')

二是用 Feather 库执行相同操作的方法:

feather.write_dataframe(df, '1M.feather')


加载


加载也是一样的,同样还是两种方式。一是通过pandas加载:

df = pd.read_feather('1M.feather')

二是用 Feather 加载:

df =feather.read_dataframe('1M.feather')

操作习惯一样,难度完全没有。


和CSV的区别


对比产生美。下面来看下feathercsv的差距有多大。下图显示了上面本地保存 DataFrame 所需的时间:


1.png


差距巨大,有木有!原生 Feather(图中的Native Feather)比 CSV 快了将近 150 倍左右。如果使用 pandas 处理 Feather 文件并没有太大关系,但与 CSV 相比,速度的提高是非常显著的。然后再看下读取不同格式的相同数据集需要多长时间。


2.png同样,差异也很明显。CSV 的读取速度要慢得多。并且CSV占用的磁盘空间也更大。CSV 文件占用的空间是 Feather 文件占用的空间的两倍多。假如我们每天存储千兆字节的数据,那么选择正确的文件格式至关重要。Feather 在这方面完全碾压了 CSV


当然,如果追求更多的压缩空间,也可以试试Parquet,也是一个可以替代CSV 的格式。


结语


说了这么多,可能很多同学还是甩出一句话:谢谢东哥,我选CSV。 这个东西怎么说呢,当你需要它时,它就有用,如果日常没有速度和空间的强烈需求,还是老老实实CSV吧。CSV已经用惯了,改变使用习惯还是挺难的。

相关文章
|
2天前
|
存储 数据挖掘 数据处理
使用pandas高效读取筛选csv数据
本文介绍了使用Python的Pandas库读取和处理CSV文件。首先,确保安装了Pandas,然后通过`pd.read_csv()`函数读取CSV,可自定义分隔符、列名、索引等。使用`head()`查看数据前几行,`info()`获取基本信息。Pandas为数据分析提供强大支持,是数据科学家的常用工具。
6 0
|
1月前
|
存储 NoSQL 测试技术
JMeter Redis 数据集 vs CSV 数据集性能对比
【2月更文挑战第27天】JMeter Redis 数据集 vs CSV 数据集性能对比
89 1
JMeter Redis 数据集 vs CSV 数据集性能对比
|
6月前
|
缓存 Java easyexcel
如何高效的导出 百万级别的数据量 到 Excel?
如何高效的导出 百万级别的数据量 到 Excel?
123 0
|
3月前
|
关系型数据库 大数据 Python
如何快速创建千万行CSV 数据?
如何快速创建千万行CSV 数据?
|
8月前
|
存储 算法 Unix
压缩算法丨为什么600GB的vcf文件压缩后只剩16GB?数据压缩的原理和方法详解
压缩算法丨为什么600GB的vcf文件压缩后只剩16GB?数据压缩的原理和方法详解
|
8月前
|
数据挖掘 Python
大神是这样处理 CSV 数据的
大神是这样处理 CSV 数据的
|
Python
modin.pandas通过多进程可以使得读取大文件的速度提高4倍左右(pandas替代方案)
modin.pandas通过多进程可以使得读取大文件的速度提高4倍左右(pandas替代方案)
183 0
|
算法 Python
pandas分批读取CSV并分批处理数据
pandas分批读取CSV并分批处理数据
CSV__02--使用csv库对每条商品求平均评分
有很多数据存储在csv文件中,每件商品有唯一id,以及评分字段,csv文件按照id排列,需要将相同商品id的评分进行一个求平均分的操作。
ML之FE:数据随机抽样之利用pandas的sample函数对超大样本的数据集进行随机采样,并另存为csv文件
ML之FE:数据随机抽样之利用pandas的sample函数对超大样本的数据集进行随机采样,并另存为csv文件