Python 将货币精确保存到存储库(十进制?)

Python 将货币精确保存到存储库(十进制?),python,pandas,pytables,Python,Pandas,Pytables,在熊猫城,我经常与货币打交道。到目前为止,我一直在使用默认的浮点值,但是处理精度的缺乏是令人讨厌的,而且容易出错。我正在尝试切换到对某些片段使用十进制,这可能会使计算速度慢很多,但却是精确的。但是,当我尝试保存到熊猫商店(例如,通过pytables保存到hdf5store)时,我得到: TypeError:无法序列化列[o],因为其数据内容是[mixed]对象数据类型 以下是我尝试做的一个简短示例: import pandas as pd from decimal import Decimal

在熊猫城,我经常与货币打交道。到目前为止,我一直在使用默认的浮点值,但是处理精度的缺乏是令人讨厌的,而且容易出错。我正在尝试切换到对某些片段使用
十进制
,这可能会使计算速度慢很多,但却是精确的。但是,当我尝试保存到熊猫商店(例如,通过pytables保存到hdf5store)时,我得到:
TypeError:无法序列化列[o],因为其数据内容是[mixed]对象数据类型

以下是我尝试做的一个简短示例:

import pandas as pd
from decimal import Decimal
teststore = pd.HDFStore('teststore.h5')
df = pd.DataFrame(data={'o':[Decimal('5.1')]})
teststore['test'] = df
。。这引发了上述例外
df.convert\u对象(convert\u numeric=True)
没有帮助

是否有办法将十进制数保存到pandas商店,如果没有,是否有建议在pandas商店中精确存储货币的方法


我正在使用python 2.7.8、pandas 0.14.1和pytables 3.1.1。

适用于0.15.0。虽然它本质上是一个实际的python对象,所以使用HDF5几乎没有任何好处

In [46]: from decimal import Decimal

In [47]: teststore = pd.HDFStore('teststore.h5')

In [48]: df = pd.DataFrame(data={'o':[Decimal('5.1')]})

In [49]: teststore['test'] = df
pandas/io/pytables.py:2487: PerformanceWarning: 
your performance may suffer as PyTables will pickle object types that it cannot
map directly to c-types [inferred_type->mixed,key->block0_values] [items->['o']]

  warnings.warn(ws, PerformanceWarning)
仅供参考,通常float64的精度为14-16位,因此不确定为什么不使用它们(您可能需要更改显示打印精度才能看到)


非常酷,它在0.15.0和performance warning heeded.re np.float64 vs decimal中工作:我不需要这样的精度级别-通常最多需要降到0.0001。例如,如果我从0开始,加上1分(0.01)十次,得到10分(0.1),结果与直接指定0.1不同。最后,我不得不建立并使用一个小型的“软”比较器库等,以允许少量的错误,这是较慢的和麻烦的使用。关于这一点,在某处和其他地方有很多线程,推荐的解决方案通常是十进制的,尽管我还没有找到任何numpy/pandas特定的解决方案。
In [50]: In [34]: pd.set_option('precision',16)

In [51]: In [35]: s = Series([0.0000000000001,0.000000000000002])

In [52]: s+s
Out[52]: 
0    0.000000000000200
1    0.000000000000004
dtype: float64