use*_*ty1 13 python python-3.x pandas
所以我有一个pandas dataframe对象,其中包含两列小数位的精度,如"133.04".没有带有3个或更多小数位的数字,只有两个.
我已经尝试使用Decimal模块,但是当我尝试像这样重新采样时
gr_by_price = df['price'].resample(timeframe, how='ohlc')
Run Code Online (Sandbox Code Playgroud)
我明白了
pandas.core.groupby.DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)
在此之前我检查dtype
print(type(df['price'][0]))
<class 'decimal.Decimal'>
Run Code Online (Sandbox Code Playgroud)
我是这个图书馆和资金处理的新手,也许Decimal不是这个的正确选择?我该怎么办?
如果我将此列投射到<class 'numpy.float64'>
一切正常.
更新:现在我正在使用这种方法
d.Decimal("%0.2f" % float(d.Decimal("1.04")))
Decimal('1.04')
Run Code Online (Sandbox Code Playgroud)
从这个问题
Ale*_*rov 15
我们遇到了类似的问题,最好的想法是将它乘以100并将其表示为整数
(并使用/ 100表示打印/外部选项).
它将导致快速精确的计算(1 + 2 == 3不像0.1 + 0.2!= 0.3)
我过去也遇到过这个问题,我最终使用的解决方案是将货币表示为其最低面额的倍数(即美元兑换1美分).因此,类型将是int
.如此处所述,此方法的优点是可以执行无损整数计算.
Price (currency) = Multiplyer * Sub_unit
Run Code Online (Sandbox Code Playgroud)
例如.对于美元,价格的单位是美元,子单位是1美分,乘数是100.
我想提到的另一个方面是,这在不同货币中运作良好.例如,日元的最小面额是1日元,在这种情况下乘数是1.印度尼西亚卢比的最小面额是1000卢比,所以乘数也可以是1.您只需记住每种货币的乘数即可.
实际上,您甚至可以创建一个自定义类来为您包装此转换,这可能是最方便的解决方案.