2024-05-14 03:01:08 发布
网友
我在计算一些标准差,它们给出了浮点误差。我想尝试将数据序列转换为十进制(使用https://docs.python.org/3/library/decimal.html),看看这是否解决了我的问题。
我好像做不出熊猫系列。
我怎么能把pd.Series的float64转换成pd.Series的decimal,这样我就可以:
pd.Series
float64
decimal
Series.pct_change().ewm(span=35, min_periods=35).std()
我认为您可以直接用Decimal类型创建数据帧,并用这些值进行操作
import pandas as pd import numpy as np from decimal import * df = pd.DataFrame({ 'DECIMAL_1': [Decimal('2342.2345234'), Decimal('564.5678'), Decimal('76867.8923892')], 'DECIMAL_2': [Decimal('67867.43534534323'), Decimal('67876.345345'), Decimal('234234.2345345')] }) df['DECIMAL_3'] = df['DECIMAL_1'] + df['DECIMAL_2'] df.dtypes
缺点可能是列dtype将是object,性能恐怕会降低。无论如何,我认为任何使用Decimal的操作都需要比使用浮点操作更多的计算。
dtype
object
Decimal
也许最好的解决方案是拥有数据帧的副本。一个DF带浮点数,另一个带小数。如果需要进行快速操作,可以将DF与float一起使用;如果需要将新值与某些特定精度的单元格进行比较或赋值,可以使用Decimal创建的DF。
告诉我你对我的建议有什么看法。
注意:我用DataFrame做了示例,但DataFrame是用Series构建的
想要这个吗?
def column_round(decimals): return partial(Series.round, decimals=decimals) df.apply(column_round(2))
或者让我们使用np.vectorize以便我们可以使用decimal.quantize函数来进行舍入,这将使变量保留为十进制而不是np.float64
np.vectorize
decimal.quantize
np.float64
npquantize = np.vectorize(decimal.Decimal.quantize)
我一直在调查,这似乎解决了pct的问题
ts.diff().div(ts.shift(1))
我认为您可以直接用Decimal类型创建数据帧,并用这些值进行操作
缺点可能是列
dtype
将是object
,性能恐怕会降低。无论如何,我认为任何使用Decimal
的操作都需要比使用浮点操作更多的计算。也许最好的解决方案是拥有数据帧的副本。一个DF带浮点数,另一个带小数。如果需要进行快速操作,可以将DF与float一起使用;如果需要将新值与某些特定精度的单元格进行比较或赋值,可以使用Decimal创建的DF。
告诉我你对我的建议有什么看法。
注意:我用DataFrame做了示例,但DataFrame是用Series构建的
想要这个吗?
或者让我们使用
np.vectorize
以便我们可以使用decimal.quantize
函数来进行舍入,这将使变量保留为十进制而不是np.float64
我一直在调查,这似乎解决了pct的问题
相关问题 更多 >
编程相关推荐