indexing - 使用带有 float 的 Pandas reindex : interpolation

标签 indexing integer pandas interpolation reindex

你能解释一下这种奇怪的行为吗?

df=pd.DataFrame({'year':[1986,1987,1988],'bomb':arange(3)}).set_index('year')

In [9]: df.reindex(arange(1986,1988.125,.125))
Out[9]: 
          bomb
1986.000     0
1986.125   NaN
1986.250   NaN
1986.375   NaN
1986.500   NaN
1986.625   NaN
1986.750   NaN
1986.875   NaN
1987.000     1
1987.125   NaN
1987.250   NaN
1987.375   NaN
1987.500   NaN
1987.625   NaN
1987.750   NaN
1987.875   NaN
1988.000     2

In [10]: df.reindex(arange(1986,1988.1,.1))
Out[10]: 
        bomb
1986.0     0
1986.1   NaN
1986.2   NaN
1986.3   NaN
1986.4   NaN
1986.5   NaN
1986.6   NaN
1986.7   NaN
1986.8   NaN
1986.9   NaN
1987.0   NaN
1987.1   NaN
1987.2   NaN
1987.3   NaN
1987.4   NaN
1987.5   NaN
1987.6   NaN
1987.7   NaN
1987.8   NaN
1987.9   NaN
1988.0   NaN

当增量不是 0.125 时,我发现新索引值不会“找到”具有匹配值的旧行。即有一个没有被克服的精度问题。即使我在尝试插入之前强制索引为浮点数也是如此。发生了什么和/或这样做的正确方法是什么?
通过使用,我已经能够让它以 0.1 的增量工作
reindex(  np.array(map(round,arange(1985,2010+dt,dt)*10))/10.0 )

顺便说一下,我这样做是作为线性插值多个列的第一步(例如,“bomb”就是其中之一)。如果有更好的方法来做到这一点,我很乐意直截了当。

最佳答案

你得到了你所要求的。 reindex 方法仅尝试将数据添加到您提供的新索引上。正如评论中提到的,您可能正在索引中查找日期。我猜您希望 reindex 方法可以做到这一点(插值):

df2 =df.reindex(arange(1986,1988.125,.125))
pd.Series.interpolate(df2['bomb'])

1986.000    0.000
1986.125    0.125
1986.250    0.250
1986.375    0.375
1986.500    0.500
1986.625    0.625
1986.750    0.750
1986.875    0.875
1987.000    1.000
1987.125    1.125
1987.250    1.250
1987.375    1.375
1987.500    1.500
1987.625    1.625
1987.750    1.750
1987.875    1.875
1988.000    2.000
Name: bomb

您使用的第二个示例是不一致可能是因为浮点精度。步进 0.125 等于 1/8,这可以用二进制精确完成。步进 0.1 不能直接映射到二进制,因此 1987 可能相差一小部分。
1987.0 == 1987.0000000001
False

关于indexing - 使用带有 float 的 Pandas reindex : interpolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17351233/

相关文章:

python - 查找包含特定字符的字符串的单元格数量

python - Pandas 数据框导出到 excel 导致 TypeError

python - 使用 numpy 查找每列的最大值及其索引(+ 当最大值在同一列中重复时)

sql-server - 非聚集索引在堆上的性能与聚集索引的性能

mysql - 索引字段+限制1与唯一字段在性能方面的比较| MySQL

integer - 什么时候对负数取模才有意义?

python - 将列表映射到 1 和 0

database - WHERE 子句中 OR 条件下的 Postgres 索引行为

algorithm - 使用 4 个操作找到一对可以达到另一对的整数

java - 无法将整数文件写入java中的文件