我有一个浮动:1.2333333
如何将逗号作为小数点分隔符更改为两位十进制数,例如1,23?
所以我有一个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)
从这个问题
假设我有一个自定义类派生自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解释器中?
我对这种减法和求和的工作方式有点困惑:
A = 5
B = 0.1
C = A+B-A
Run Code Online (Sandbox Code Playgroud)
我发现答案是 0.099999999999999645。为什么答案不是 0.1?
我似乎在漂浮物上失去了很多精确度.
例如,我需要解决一个矩阵:
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 …
在 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 …