本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《 阿里云开发者社区用户服务协议 》和 《 阿里云开发者社区知识产权保护指引 》。如果您发现本社区中有涉嫌抄袭的内容,填写 侵权投诉表单 进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

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


为什么要和CSV再见?


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


Feather是什么?


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


如何在Python中操作Feather?


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

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

只需要上面一行安装即可,很简单。我们通过一个较大的数据集举例,需要 Feather Numpy pandas 来一起配合。数据集有 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_feather Feather 格式:

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的区别


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


1.png


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


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


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


结语


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