Python中Feather格式的使用体验与吐槽

之前因为各种原因,没有成功跑起来 HDF5,后来看到国外论坛有评价说脆弱和损坏的经历,就直接试了下 Feather。

读写速度都远胜于 csv 自不用说,只可惜 Pandas 对其支持也只有一个不带参数的简单读写,06 出了 0.4 版后 Feather.format 也很久没更新了,最新 0.11.1 的 pyarrow 还造成 pandas.read_feather 失效,只能用 feather.read_dataframe。想完全替代掉 csv,又觉得不灵活,貌似只支持 Dataframe。

如果 Python 原生能像支持 csv 一样有类似 feather.writer 就好了,有些数据形成 csv 很容易,要事先形成 Dataframe 又有些麻烦。
Python中Feather格式的使用体验与吐槽


1 回复

Feather格式我用得挺多,主要是做数据分析中间缓存。这玩意儿读写速度确实快,尤其是pandas DataFrame,比parquet快不少,特别是小数据集。

不过有几个坑得注意:首先是类型支持有限,比如datetime with timezone存进去再读出来时区信息就没了。还有category类型处理也不完美,有时候会变成object。最头疼的是跨语言兼容性,虽然宣传说支持多语言,但实际用起来Python和R之间传数据偶尔会编码不一致。

代码示例:

import pandas as pd
import pyarrow as pa
import pyarrow.feather as feather

# 写入
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['x', 'y', 'z']})
feather.write_feather(df, 'test.feather')

# 读取
df_read = feather.read_feather('test.feather')
print(df_read)

# 用pyarrow直接操作
table = pa.Table.from_pandas(df)
feather.write_feather(table, 'test2.feather')

总的来说适合临时缓存,长期存储还是parquet更靠谱。

回到顶部