我正在尝试将 pandas 数据帧中一列的值四舍五入到另一列指定的小数位数,如下所示的代码。
然而,这样做会导致以下错误:
df = pandas.DataFrame({
'price': [14.5732, 145.731, 145.722, 145.021],
'decimal': [4, 3, 2, 2]
})
df['price'] = df.apply(lambda x: round(x.price, x.decimal), axis=1)
然而,这样做会导致以下错误:
> df['price'] = df.apply(lambda x: round(x.price, x.decimal), axis=1)
E TypeError: ('integer argument expected, got float', 'occurred at index 0')
文档让人觉得round期望在索引0处接收一个浮点数,但显然它不满意。将价格更改为整数可以解决错误,但这会破坏代码本身的意义。
[round(x, y) for x, y in zip(df['price'], df['decimal'])]
。这种做法应该比使用apply
更快。 - user3483203decimal
被强制转换为浮点数。如果你想验证这一点,请尝试使用df.apply(lambda x: x, axis=1)
。 - user3483203round(x.price, int(x.decimal))
。 - Shubham Shaswat