【发布时间】:2015-06-14 14:55:39
【问题描述】:
所以我有一个 pandas 数据框对象,其中包含货币列,精度为小数点后两位,如“133.04”。没有小数点后三位或更多的数字,只有两位。
我的尝试:十进制模块
我尝试为此使用 Decimal 模块,但是当我尝试像这样重新采样时
gr_by_price = df['price'].resample(timeframe, how='ohlc')
我明白了
pandas.core.groupby.DataError: No numeric types to aggregate
在此之前我检查了 dtype
print(type(df['price'][0]))
<class 'decimal.Decimal'>
我是这个库和货币处理的新手,也许 Decimal 不是这个的正确选择? 我该怎么办?
如果我将此专栏投给<class 'numpy.float64'>,一切正常。
更新: 目前我正在使用这种方法
d.Decimal("%0.2f" % float(d.Decimal("1.04")))
Decimal('1.04')
【问题讨论】:
-
不幸的是,您需要为此使用
np.float64,只要不超过精度和限制就可以了 -
@EdChum 嗯.. 我不会把 133.04 变成 133.05 或 133.03,对吗?所以我在重新采样、重新采样并再次转换为 Decimal 之前将其转换为 float64,对吗?
-
这可能会发生,但通常不精确发生在较低的数字,但如果你在最后转换为 Decimal 它应该剪辑这个
-
@EdChum 谢谢。我现在就这样做。这是有趣的部分
>>> d.Decimal(float(d.Decimal("1.04"))) Decimal('1.04000000000000003552713678800500929355621337890625') -
大多数时候,您想要做的是将数字存储为浮点数,然后使用适当的格式进行显示。乐趣发生在小数点后的第 12 位或第 13 位,因此在实践中很少出现问题。 Decimal 不是核心 dtype(如 int 或 float),因此使用起来可能很痛苦。请注意,在核心 dtypes 之外,pandas 将事物存储为对象。使用
info()方法检查dtypes。
标签: python python-3.x pandas dataframe