使用大熊猫,索引错误

时间:2018-08-01 07:01:35

标签: pandas indexing rounding

我试图四舍五入,如果它们的十进制数字以(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:基于非整数索引的索引只能具有非整数索引器”

我该如何解决这个问题?

1 个答案:

答案 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