相关疑难解决方法(0)

羽毛和镶木地板有什么区别?

两者都是用于数据分析系统的柱状(磁盘)存储格式.两者都集成在Apache Arrow(用于python的pyarrow包)中,旨在与Arrow对应作为柱状内存分析层.

两种格式有何不同?

在可能的情况下,你是否总是喜欢使用羽毛?

羽毛镶木地板更合适,反之亦然的用途是什么?


附录

我在这里找到了一些提示https://github.com/wesm/feather/issues/188,但考虑到这个项目的年龄,它可能有点过时了.

不是一个严肃的速度测试,因为我只是倾倒并加载一个完整的Dataframe,但如果您之前从未听说过这些格式,那么会给您一些印象:

 # IPython    
import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.feather as feather
import pyarrow.parquet as pq
import fastparquet as fp


df = pd.DataFrame({'one': [-1, np.nan, 2.5],
                   'two': ['foo', 'bar', 'baz'],
                   'three': [True, False, True]})

print("pandas df to disk ####################################################")
print('example_feather:')
%timeit feather.write_feather(df, 'example_feather')
# 2.62 ms ± 35.8 µs per loop …
Run Code Online (Sandbox Code Playgroud)

python pandas parquet feather pyarrow

50
推荐指数
2
解决办法
1万
查看次数

Pandas msgpack vs pickle

msgpack在熊猫应该是一个替代品pickle.

根据msgpack上Pandas文档:

这是一种轻量级的可移植二进制格式,类似于二进制JSON,具有很高的空间效率,并且在写入(序列化)和读取(反序列化)方面都提供了良好的性能.

然而,我发现它的性能似乎与咸菜不相上下.

df = pd.DataFrame(np.random.randn(10000, 100))

>>> %timeit df.to_pickle('test.p')
10 loops, best of 3: 22.4 ms per loop

>>> %timeit df.to_msgpack('test.msg')
10 loops, best of 3: 36.4 ms per loop

>>> %timeit pd.read_pickle('test.p')
100 loops, best of 3: 10.5 ms per loop

>>> %timeit pd.read_msgpack('test.msg')
10 loops, best of 3: 24.6 ms per loop
Run Code Online (Sandbox Code Playgroud)

问题: 除了泡菜的潜在安全问题,msgpack对pickle有什么好处?pickle仍然是序列化数据的首选方法,还是目前存在更好的替代方案?

python msgpack pandas

21
推荐指数
1
解决办法
9365
查看次数

将具有混合数据和类别的pandas DataFrame存储到hdf5中

我想将具有不同列的dataFrame存储到hdf5文件中(查找下面带有数据类型的摘录).

In  [1]: mydf
Out [1]:
endTime             uint32
distance           float16
signature         category
anchorName        category
stationList         object
Run Code Online (Sandbox Code Playgroud)

在转换一些列(我上面的摘录中的signature和anchorName)之前,我使用了类似下面的代码来存储它(它工作得非常好):

path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', complevel=9, complib='bzip2')
Run Code Online (Sandbox Code Playgroud)

但它不适用于类别,然后我尝试了以下:

path = 'tmp4.hdf5'
key = 'journeys'
mydf.to_hdf(path, key, mode='w', format='t', complevel=9, complib='bzip2')
Run Code Online (Sandbox Code Playgroud)

它工作正常,如果我删除列stationList,其中每个条目是一个字符串列表.但是在本专栏中,我得到以下异常:

Cannot serialize the column [stationList] because
its data contents are [mixed] object dtype
Run Code Online (Sandbox Code Playgroud)

如何改进我的代码以存储数据框?

pandas版本:0.17.1
python版本:2.7.6(由于兼容性原因无法更改)


edit1(一些示例代码):

import pandas as pd

mydf = pd.DataFrame({'endTime' : pd.Series([1443525810,1443540836,1443609470]),
                    'distance' : pd.Series([454.75,477.25,242.12]),
                    'signature' : pd.Series(['ab','cd','ab']),
                    'anchorName' : pd.Series(['tec','ing','pol']),
                    'stationList' : pd.Series([['t1','t2','t3'],['4','t2','t3'],['t3','t2','t4']]) …
Run Code Online (Sandbox Code Playgroud)

python pandas

12
推荐指数
1
解决办法
5345
查看次数

标签 统计

pandas ×3

python ×3

feather ×1

msgpack ×1

parquet ×1

pyarrow ×1