问题描述
我想将一个numpy数组转换为pyarrow.Table。有推荐的方法吗?
通过熊猫DataFrame转换最简单:
ra = ... # some recarray
T1 = pa.Table.from_pandas(pd.DataFrame(ra))
,但似乎应该增加不必要的开销。我已经尝试过from_pydict
,尽管看起来有些笨拙,但它似乎可以工作:
ra = ... # some recarray
T2 = pa.Table.from_pydict({k:ra[k] for k in ra.dtype.fields.keys()})
如果我在一个比较实际的示例中尝试对这两个时间进行计时,则from_pydict
方法会更快:
c:\>python
Python 3.8.5 (default,Sep 3 2020,21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda,Inc. on win32
Type "help","copyright","credits" or "license" for more @R_139_4045@ion.
>>> import pandas as pd
>>> import pyarrow as pa
>>> import numpy as np
>>>
>>> np.random.seed(123)
>>> rectype = np.dtype([('timestamp',np.int64),... ('category',np.int32),... ])
>>> nrows = 20000
>>> rawvals = np.random.randint(1000,size=(nrows,2))
>>> ra = np.array([tuple(row) for row in rawvals],dtype=rectype)
>>> T1 = pa.Table.from_pandas(pd.DataFrame(ra))
>>> T2 = pa.Table.from_pydict({k:ra[k] for k in ra.dtype.fields.keys()})
>>> (T1.to_pandas() == T2.to_pandas()).all()
timestamp True
category True
dtype: bool
>>>
>>> import timeit
>>> def f1():
... return pa.Table.from_pandas(pd.DataFrame(ra))
...
>>> def f2():
... return pa.Table.from_pydict({k:ra[k] for k in ra.dtype.fields.keys()})
...
>>> timeit.timeit(f1,number=1000)
1.4761637000000007
>>> timeit.timeit(f2,number=1000)
0.05712700000000126
在这种情况下,from_pydict
是更好的方法吗?它有什么缺点吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)