如何用十进制创建Pandas系列?

2024-05-14 03:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在计算一些标准差,它们给出了浮点误差。我想尝试将数据序列转换为十进制(使用https://docs.python.org/3/library/decimal.html),看看这是否解决了我的问题。

我好像做不出熊猫系列。

我怎么能把pd.Seriesfloat64转换成pd.Seriesdecimal,这样我就可以:

Series.pct_change().ewm(span=35, min_periods=35).std()

Tags: 数据httpsorgdocshtmllibrary序列误差
2条回答

我认为您可以直接用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的操作都需要比使用浮点操作更多的计算。

也许最好的解决方案是拥有数据帧的副本。一个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

npquantize = np.vectorize(decimal.Decimal.quantize)

我一直在调查,这似乎解决了pct的问题

ts.diff().div(ts.shift(1))

相关问题 更多 >