我有一个带有浮点数索引的pandas DataFrame,我使用它来查找值(类似于字典)。由于浮点数不完全是它们应该乘的值,因此在将其设置为索引之前,我将所有值乘以10并转换为整数
最初的想法(显然会引发关键错误)是这样的:
.astype(int)
。但是,这似乎执行了floor
而不是四舍五入。因此,1.999999999999999992被转换为1而不是2。使用pandas.DataFrame.round()
方法进行四舍五入也无法避免此问题,因为值仍然存储为浮点数。最初的想法(显然会引发关键错误)是这样的:
idx = np.arange(1,3,0.001)
s = pd.Series(range(2000))
s.index=idx
print(s[2.022])
尝试将其转换为整数:
idx_int = idx*1000
idx_int = idx_int.astype(int)
s.index = idx_int
for i in range(1000,3000):
print(s[i])
输出总是有点随机的,因为整数的“真实”值可能略高于或低于所需值。在这种情况下,索引包含两次值1000,不包含值2999。
floor
而不是ceil
?(实际上,两者都不对:这是一个截断操作——即它向零舍入,而不是向正无穷大(ceil)或向负无穷大(floor)舍入。) - Mark Dickinsondf.round(0).astype(pd.Int64Dtype())
:) (https://dev59.com/WGEi5IYBdhLWcg3wbr3S) - Tomasz Gandor.astype(object).fillna('')
或许可以解决问题。 - Tomasz Gandor