Python 如何创建带小数的熊猫系列?
我在计算一些标准差,这些标准差会产生浮点误差。我想尝试将数据序列转换为十进制(使用),看看这是否解决了我的问题 我似乎无法生成一系列的Python 如何创建带小数的熊猫系列?,python,python-3.x,numpy,pandas,decimal,Python,Python 3.x,Numpy,Pandas,Decimal,我在计算一些标准差,这些标准差会产生浮点误差。我想尝试将数据序列转换为十进制(使用),看看这是否解决了我的问题 我似乎无法生成一系列的十进制 我如何将一个正常的pd.Series的float64转换成pd.Series的decimal,这样我就可以: Series.pct_change().ewm(span=35, min_periods=35).std() 你喜欢这个工作吗 def column_round(decimals): return partial(Series.roun
十进制
我如何将一个正常的pd.Series
的float64
转换成pd.Series
的decimal
,这样我就可以:
Series.pct_change().ewm(span=35, min_periods=35).std()
你喜欢这个工作吗
def column_round(decimals):
return partial(Series.round, decimals=decimals)
df.apply(column_round(2))
或者,让我们使用np.vectorize
,这样我们就可以使用decimal.quantize
函数进行舍入,这将使变量保留为十进制,而不是np.float64
npquantize = np.vectorize(decimal.Decimal.quantize)
我一直在研究它,这似乎解决了pct_变化的问题
ts.diff().div(ts.shift(1))
我认为您可以直接使用十进制类型创建数据帧,并使用值进行操作
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
,我担心性能会降低。无论如何,我认为任何使用十进制
的操作都需要比使用浮点操作更多的计算量
也许最好的解决方案是拥有数据帧的副本。一个DF带浮点数,另一个带小数点。如果需要进行快速操作,可以使用带浮点数的DF,如果需要以特定精度对某些单元格进行比较或分配新值,可以使用使用十进制创建的DF
告诉我你对我的建议有什么看法
注意:我用DataFrame做了一个示例,但是DataFrame是用Series构建的如果我理解正确,它仍然使用浮点算法;我想强制执行十进制算法。您是否考虑过将序列转换为numpy数组,并在应用到decimal之前应用np.vectorize?