Pandas 插值给出奇怪的结果

2024-01-09

我正在使用 Pandas 及时插值数据点,但是在重采样和插值时,使用不同的重采样率时,相同的插值时间会得到不同的结果。

这是一个测试示例:

import pandas as pd
import datetime

data = pd.DataFrame({'time': list(map(lambda a: datetime.datetime.strptime(a, '%Y-%m-%d %H:%M:%S'),
                                                ['2021-03-28 12:00:00', '2021-03-28 12:01:40',
                                                 '2021-03-28 12:03:20', '2021-03-28 12:05:00',
                                                 '2021-03-28 12:06:40', '2021-03-28 12:08:20',
                                                 '2021-03-28 12:10:00', '2021-03-28 12:11:40',
                                                 '2021-03-28 12:13:20', '2021-03-28 12:15:00'])),
                     'latitude': [44.0, 44.00463175663968, 44.00919766508212,
                                  44.01357245844425, 44.0176360866699, 44.02127701531401,
                                  44.02439529286458, 44.02690530159084, 44.02873811544965,
                                  44.02984339933479],
                     'longitude': [-62.75, -62.74998054893869, -62.748902164559304,
                                   -62.74679419470262, -62.7437142666763, -62.739746727555016,
                                   -62.735000345048086, -62.72960533041183, -62.72370976436673,
                                   -62.717475524320704]})

data.set_index('time', inplace=True)

a = data.resample('20s').interpolate(method='time')
b = data.resample('60s').interpolate(method='time')

print(a.iloc[:18:3])
print(b.iloc[:6])

# --- OUTPUT --- #

                      latitude  longitude
time                                     
2021-03-28 12:00:00  44.000000 -62.750000
2021-03-28 12:01:00  44.002779 -62.749988  # <-- Different Values
2021-03-28 12:02:00  44.005545 -62.749765  # <-- Different Values
2021-03-28 12:03:00  44.008284 -62.749118  # <-- Different Values
2021-03-28 12:04:00  44.010948 -62.748059  # <-- Different Values
2021-03-28 12:05:00  44.013572 -62.746794
                      latitude  longitude
time                                     
2021-03-28 12:00:00  44.000000 -62.750000
2021-03-28 12:01:00  44.002714 -62.749359  # <-- Different Values
2021-03-28 12:02:00  44.005429 -62.748718  # <-- Different Values
2021-03-28 12:03:00  44.008143 -62.748077  # <-- Different Values
2021-03-28 12:04:00  44.010858 -62.747435  # <-- Different Values
2021-03-28 12:05:00  44.013572 -62.746794 

The a数据框和b数据帧应该在每分钟预测相同的值,但在大多数情况下,此时它们会有所不同。

有谁知道这可能是什么原因造成的?绘制完整结果时,看起来在分钟上重新采样会导致 pandas 忽略不在分钟上的时间戳中的数据(例如 12:01:40 和 12:03:20)。


我的评论总结和一些解释:

如果您进行比较,您可以观察到发生了什么data.resample('60s').asfreq() to data.resample('20s').asfreq()。虽然所有样本数据都适合 20 年代网格,但只有少数值保留在 60 年代网格中。pandas 重新采样插值产生 NaN https://stackoverflow.com/q/47148446/10197418基本上描述了问题。

重点是,pandas重新采样和then插值。如果重采样导致数据丢失,则这些数据不可用于插值。如果您想利用最初拥有的所有数据,您需要进行插值,然后重置索引。你可以这样做

# let's create new indices, the desired index...
new_index_20s = pd.date_range(data.index.min(), data.index.max(), freq='20s')
# and a helper for interpolation; the combination of existing and desired index
tmp_index_20s = data.index.union(new_index_20s)

new_index_60s = pd.date_range(data.index.min(), data.index.max(), freq='60s')
tmp_index_60s = data.index.union(new_index_20s)

# re-index to the helper index,
# interpolate,
# and re-index to desired index 
a1 = data.reindex(tmp_index_20s).interpolate('index').reindex(new_index_20s)
b1 = data.reindex(tmp_index_60s).interpolate('index').reindex(new_index_60s)

现在您已就结果时间序列达成一致:

print(a1.iloc[:18:3])
print(b1.iloc[:6])
                      latitude  longitude
2021-03-28 12:00:00  44.000000 -62.750000
2021-03-28 12:01:00  44.002779 -62.749988
2021-03-28 12:02:00  44.005545 -62.749765
2021-03-28 12:03:00  44.008284 -62.749118
2021-03-28 12:04:00  44.010948 -62.748059
2021-03-28 12:05:00  44.013572 -62.746794
                      latitude  longitude
2021-03-28 12:00:00  44.000000 -62.750000
2021-03-28 12:01:00  44.002779 -62.749988
2021-03-28 12:02:00  44.005545 -62.749765
2021-03-28 12:03:00  44.008284 -62.749118
2021-03-28 12:04:00  44.010948 -62.748059
2021-03-28 12:05:00  44.013572 -62.746794
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas 插值给出奇怪的结果 的相关文章

随机推荐

  • 计算第 95 个百分位值?

    我正在尝试计算表列中的第 95 个百分位数 并使用TOP 95 PERCENT构造 我想知道以下方法是否正确 或者是否有更好的方法来做同样的事情 SELECT AVG Value FROM SELECT TOP 95 PERCENT WIT
  • 使用 Swift 获取字符串中子字符串的索引

    我习惯在 JavaScript 中这样做 var domains abcde substring 0 abcde indexOf cd Returns ab Swift没有这个功能 如何做类似的事情 编辑 更新 Xcode 11 4 Swi
  • 如何在 Vite 开发服务器中填充“process”Node 模块?

    在我的 Vite 项目中 我依赖于一个使用process节点在其功能之一中是全局的 我没有从我的代码中调用这个函数 但是Vite dev当我导入模块时 服务器仍然给我这个错误 Uncaught ReferenceError process
  • 如何使用 slick 3.2 + 在 select 子句中编写嵌套查询

    有没有办法使用 slick 3 2 创建嵌套选择 基本上我需要的所有内容都在这里描述如何在 select 子句中编写嵌套查询 https stackoverflow com questions 14920153 how to write n
  • 在 ES6 代码中扩展 EcmaScript 5 类

    我想在新项目中使用 EcmaScript 6 通过 Browserify 和 Babelify 但它依赖于用 ES5 编写的第三方库 问题是在我的项目中创建从库中的子类扩展的子类 E g Library written in ES5 fun
  • 如何动态添加where子句来查询使用nestjs查询生成器生成的查询?

    我正在开发一个 API UI 的要求基于我将收到过滤结果的搜索字段的值 UI 上有很多搜索字段 示例代码 async getRoomsByMember active boolean email string Promise
  • 与 Ionic Framework 一起使用时,字符集 UTF 8 不起作用

    在我的网络应用程序上 我有像 这样的字符 并且我有元标记但这些字符不会显示在浏览器中 它们显示为问号 我正在使用 Ionic 框架 我缺少什么 用VS打开文件并更改保存选项File gt Advanced Save Options gt U
  • 如何覆盖打字稿中的属性?

    由于当前的语言限制 这可能是不可能的 但我正在使用最新的 TS 1 8 10 并且遇到了 ui grid 打字问题 这isRowSelectable属性于IGridOptions被定义为可选布尔值 但文档说它是一个函数 确实如此 我试图将布
  • Typescript 交换数组项目

    如何使用交换两个元素打字稿 elements elements elements push item1 elements push item2 elements push item3 elements push item4 elements
  • 将浮动子 DIV 置于具有流体宽度的父 DIV 中

    我有以下 HTML div div class child Box1 div div class child Box2 div div class child Box3 div div class child Box4 div div cl
  • Chrome 扩展程序可以在 Chrome 错误页面上运行代码吗? (即 ERR_INTERNET_DISCONNECTED)

    我正在尝试创建一个 chrome 扩展 在运行恐龙迷你游戏的 chrome 错误页面上运行一些 javascript 代码 尝试在选项卡上运行executeScript 时出现权限错误 这是我的代码 清单 js manifest versi
  • 复制 JSESSIONID cookie 时防止复制会话

    背景 我在 tomcat 上部署了一个 javaee web 应用程序 它使用基于表单的身份验证 当 Web 服务器收到登录请求时 它会将请求发送到验证用户登录 用户 ID 和密码 的专用身份验证服务 身份验证成功后 用户会话将保留在 We
  • Angular 5 路由 - 空路径不匹配

    我很困惑这个路由有什么问题 应用程序模块路由 path path1 canActivate Path1Guard loadChildren path1 path1 module Path1Module 路径1 路由 模块 const pat
  • 网站的 HttpContext.Current.Request.ApplicationPath

    我们在虚拟目录下部署了一个 Web 应用程序 现在我们想将其移至其自己的网站进行 SSL 配置 然而 有很多HttpContext Current Request ApplicationPath因此 应用程序无法按预期运行 谁能帮我看看有什
  • 这些 javascript include 定义有区别吗

    两者都包含相同的文件 两者都有效 但是其中一种比另一种有什么优势吗 Scripts jquery validate unobtrusive min js gt 在第一种情况下 Url Content 将相对路径转换为应用程序绝对路径 在第二
  • CursorIndexOutOfBoundException:请求索引 1,大小为 1

    又是我 遇到了 Android 版 sqlite 的问题 我目前得到一个 CursorIndexOutOfBoundsException 请求索引 1 尺寸为 1 但是 我遇到了索引 1 的异常 然后插入了一个cursor moveToFi
  • 基于 SVN 中的预提交构建

    我知道已经有人问过这个问题 但我们真的很想拒绝任何提交文件的尝试 这会破坏主干中的项目 拒绝已提交文件的决定基于所提交文件所属项目的构建过程的结果 我知道在预提交阶段 存储库无法同时访问 但这对我们来说不是问题 因为我们的构建速度非常快 并
  • 如何在 Angular 2 Typescript 中复制到剪贴板?

    有没有办法在 Angular2 Typescript 框架中复制剪贴板 多浏览器 中的文本 我只找到使用 Javascript 的来源 例如 document execCommand copy 您可以围绕以下内容实现 Angular2 指令
  • MIPS 上适用于 Android 的免费 Pascal

    尝试将 Delphi 库移植到 Android Free Pascal 支持 Android ARM 可以使用适用于 Windows 的预构建编译器 不过 Android NDK 现在也支持 MIPS 和 x86 FPC 人员的支持状况如何
  • Pandas 插值给出奇怪的结果

    我正在使用 Pandas 及时插值数据点 但是在重采样和插值时 使用不同的重采样率时 相同的插值时间会得到不同的结果 这是一个测试示例 import pandas as pd import datetime data pd DataFram