相关疑难解决方法(0)

如何将我的浮点数更改为两位十进制数字,并使用逗号作为python中的小数点分隔符?

我有一个浮动:1.2333333

如何将逗号作为小数点分隔符更改为两位十进制数,例如1,23?

python floating-point decimal

17
推荐指数
2
解决办法
2万
查看次数

什么dtype用于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)

这个问题

python python-3.x pandas

13
推荐指数
2
解决办法
3617
查看次数

可以在Python中创建自定义字符串文字前缀?

假设我有一个自定义类派生自str实现/覆盖一些方法:

class mystr(str):
    # just an example for a custom method:
    def something(self):
        return "anything"
Run Code Online (Sandbox Code Playgroud)

现在我必须mystr通过在构造函数中传递一个字符串来手动创建实例:

ms1 = mystr("my string")

s = "another string"
ms2 = mystr(s)
Run Code Online (Sandbox Code Playgroud)

这并不是太糟糕,但它导致了使用类似于b'bytes string'r'raw string'或的自定义字符串前缀会很酷的想法u'unicode string'.

在Python中以某种方式可以创建/注册这样的自定义字符串文字前缀,m以便文字m'my string'导致新的实例mystr
或者这些前缀是否硬编码到Python解释器中?

python string prefix string-literals

6
推荐指数
2
解决办法
1246
查看次数

谁能用python解释这个减法和求和?

我对这种减法和求和的工作方式有点困惑:

A = 5
B = 0.1
C = A+B-A
Run Code Online (Sandbox Code Playgroud)

我发现答案是 0.099999999999999645。为什么答案不是 0.1?

python

5
推荐指数
1
解决办法
224
查看次数

浮点数和decimal.Decimal的小数位问题

我似乎在漂浮物上失去了很多精确度.

例如,我需要解决一个矩阵:

4.0x -2.0y 1.0z =11.0
1.0x +5.0y -3.0z =-6.0
2.0x +2.0y +5.0z =7.0
Run Code Online (Sandbox Code Playgroud)

这是我用来从文本文件导入矩阵的代码:

f = open('gauss.dat')
lines =  f.readlines()
f.close()

j=0
for line in lines:
    bits = string.split(line, ',')
    s=[]
    for i in range(len(bits)):
        if (i!= len(bits)-1):
            s.append(float(bits[i]))
            #print s[i]
    b.append(s)
    y.append(float(bits[len(bits)-1]))
Run Code Online (Sandbox Code Playgroud)

我需要使用gauss-seidel解决,所以我需要重新排列x,y和z的方程式:

x=(11+2y-1z)/4
y=(-6-x+3z)/5
z=(7-2x-2y)/7
Run Code Online (Sandbox Code Playgroud)

这是我用来重新排列方程的代码.b是系数矩阵,y是答案向量:

def equations(b,y):
    i=0
    eqn=[]
    row=[]
    while(i<len(b)):
        j=0
        row=[]
        while(j<len(b)):
            if(i==j):
                row.append(y[i]/b[i][i])
            else:
                row.append(-b[i][j]/b[i][i])
            j=j+1
        eqn.append(row)
        i=i+1
    return eqn
Run Code Online (Sandbox Code Playgroud)

然而,我得到的答案并不精确到小数位.

例如,在重新排列上面的第二个等式时,我应该得到:

y=-1.2-.2x+.6z
Run Code Online (Sandbox Code Playgroud)

我得到的是:

y=-1.2-0.20000000000000001x+0.59999999999999998z
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个大问题,但是当你将数字提高到一个非常高的功率时,错误是非常大的.有没有解决的办法?我尝试了这个Decimal课程,但是它在功能方面效果不佳(即Decimal(x)**2 …

python floating-point decimal floating-accuracy

2
推荐指数
2
解决办法
2万
查看次数

了解Python %g 在字符串格式化中的实现,实现Java String.format 行为

在 Java 中:

String test1 = String.format("%7.2g", 3e9);
System.out.println(test1);
Run Code Online (Sandbox Code Playgroud)

这打印 3.0e+09

在 Python 2.7 中,如果我运行此代码

for num in [3e9, 3.1e9, 3.01e9, 3e2, 3.1e2, 3.01e2]:
   print '%7.2g %7.2f %7.2e' % (num, num, num)
Run Code Online (Sandbox Code Playgroud)

我得到

  3e+09 3000000000.00 3.00e+09
3.1e+09 3100000000.00 3.10e+09
  3e+09 3010000000.00 3.01e+09
  3e+02  300.00 3.00e+02
3.1e+02  310.00 3.10e+02
  3e+02  301.00 3.01e+02
Run Code Online (Sandbox Code Playgroud)

嗯?看起来精度 (.2) 参数在 Python 中的处理方式%g与在 Python %f、Python%e或 Java 中完全不同%g。这是文档(我的重点):

一般格式。对于给定的精度 p >= 1,这会将数字四舍五入为 p 位有效数字,然后根据其大小将结果格式化为定点格式或科学记数法。

精确规则如下:假设以表示类型“e”和精度 p-1 格式化的结果将具有指数 exp。然后,如果 -4 …

python string-formatting python-2.7

2
推荐指数
2
解决办法
2万
查看次数