不允许对负整数幂进行整数运算

时间:2019-08-30 12:39:39

标签: python python-3.x pandas dataframe

我有一个df

decimal_places    amount
 2                10
 3                100
 1                1000

我要基于以下计算来创建新列converted_amount

df = (df.assign(
        converted_amount=lambda x: x.amount * 10 ** (2 - x.decimal_places.fillna(2, downcast='infer'))))

但是我遇到了以下错误,

ValueError: Integers to negative integer powers are not allowed.

我想知道如何解决这个问题,所以结果看起来像是

decimal_places    amount    converted_amount
   2                10           10
   3                100          10
   1                1000         10000

1 个答案:

答案 0 :(得分:3)

这里有两个问题。首先,如错误提示所示,值必须为浮点型。但是其次,通过设置downcast='infer'decimal_places中的值将强制转换为整数,因为所有小数位均为0,因此您将得到相同的错误。所以你想要:

df = df.astype(float)
df = (df.assign(
      converted_amount=lambda x: x.amount * 10 ** (2 - x.decimal_places.fillna(2))))

对于更快的方法,您可以使用基础的numpy数组:

df['converted_amount'] = df.amount.values*(10**(2-df.decimal_places.fillna(2).values))

print(df)
    decimal_places  amount  converted_amount
0             2.0    10.0              10.0
1             3.0   100.0              10.0
2             1.0  1000.0           10000.0