Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建带小数的熊猫系列?_Python_Python 3.x_Numpy_Pandas_Decimal - Fatal编程技术网

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?