我试图四舍五入,如果它们的十进制数字以(125,375,625,875)结尾,我将其替换为(25,25,75,75)。 我的代码是:
BigDecimal oneHundred = new BigDecimal("100");
BigDecimal obj = new BigDecimal("100.3");
if (obj.compareTo(oneHundred) > 0) {
System.out.println("Greader than");
}
我收到此错误:“ ValueError:基于非整数索引的索引只能具有非整数索引器”
我该如何解决这个问题?
答案 0 :(得分:1)
如果我理解正确,则希望将小数从x.125舍入到x.25,依此类推。我不确定直接使用浮点数可以做到这一点,但是这是一种笨拙的方法(通过字符串转换)在每一步之后都使用打印输出来完成它:
import pandas as pd
# Create dummy dataframe
df = pd.DataFrame({
"number": [1.125, 1.375, 1.625, 1.875]
})
print df
DF:
number
0 1.125
1 1.375
2 1.625
3 1.875
将数字转换为字符串以处理子字符串(在这种情况下为小数)
df["number_as_string"] = df.number.map(str)
print df
DF:
number number_as_string
0 1.125 1.125
1 1.375 1.375
2 1.625 1.625
3 1.875 1.875
使用要映射的小数创建列
df.loc[df.number_as_string.str.endswith(".125"), "number_decimal"] = ".25"
df.loc[df.number_as_string.str.endswith(".375"), "number_decimal"] = ".25"
df.loc[df.number_as_string.str.endswith(".625"), "number_decimal"] = ".75"
df.loc[df.number_as_string.str.endswith(".875"), "number_decimal"] = ".75"
print df
DF:
number number_as_string number_decimal
0 1.125 1.125 .25
1 1.375 1.375 .25
2 1.625 1.625 .75
3 1.875 1.875 .75
使用字符串,获取数字的小数点前的部分,然后向其中添加您喜欢的小数。
df["number_rounded"] = df.number_as_string.str.split(".").str[0] + df.number_decimal
print df
DF:
number number_as_string number_decimal number_rounded
0 1.125 1.125 .25 1.25
1 1.375 1.375 .25 1.25
2 1.625 1.625 .75 1.75
3 1.875 1.875 .75 1.75
将该列转换为浮点型(从字符串开始)
df["number_rounded"] = df.number_rounded.map(float)
print df
最终DF:
number number_as_string number_decimal number_rounded
0 1.125 1.125 .25 1.25
1 1.375 1.375 .25 1.25
2 1.625 1.625 .75 1.75
3 1.875 1.875 .75 1.75