python - 几何 XY 数据的 Pandas 线性插值似乎忽略了点
问题描述
我正在尝试在 pandas 中对我的数据帧进行上采样(从 50 Hz 到 2500 Hz)。我必须上采样以匹配以这个更高频率采样的传感器。我有来自铣床的 x、y、z 点。当我绘制原始数据时,线条看起来很直,正如我所期望的那样。
我正在像这样插入数据框:
df.drop_duplicates(subset='time', inplace=True)
df.set_index('time', inplace=True)
df.index = pd.DatetimeIndex(df.index)
upsampled = new_df.resample('0.4ms').interpolate(method='linear')
plt.scatter(upsampled['X[mm]'], upsampled['Y[mm]'], s=0.5)
plt.plot()
我也试过
upsampled = df.resample('0.4L').interpolate(method='linear')
我希望新点总是介于原始点之间。由于我要从 50 Hz 到 2500 Hz,我预计原始数据中的每对点之间均匀分布有 50 个点。但是,似乎忽略了一些原始点,如下图所示(第二张图在一个特别麻烦的地方放大了)。
此图显示了橙色的原始点和蓝色的上采样插值点(两者都是分散的,尽管上采样的点非常密集,它看起来像一个图)。代码如下所示。
upsampled = df.resample('0.4ms').interpolate(method='linear')
plt.scatter(upsampled['X[mm]'], upsampled['Y[mm]'], s=0.5, c='blue')
plt.scatter(df['X[mm]'], df['Y[mm]'], s=0.5, c='orange')
plt.gca().set_aspect('equal', adjustable='box')
fig.show()
有什么想法可以使插值起作用吗?
解决方案
最有可能的问题是原始和重新采样的 DataFrame 中的时间戳没有对齐,因此在重新采样时我们需要指定如何处理。
由于原始频率为 50 Hz,而重新采样的频率为 2500 Hz,因此只需采用即可mean
修复它:
upsampled = new_df.resample('0.4ms').mean().interpolate(method='linear')
不幸的是,没有任何样本数据,我无法验证它是否有效。请让我知道它是否有帮助
推荐阅读
- angular - 发生复杂依赖时如何编写可重用组件
- javascript - 截面尺寸随可折叠而变化
- gradle - 如何在构建命令中在 Gradle 上添加运行时库
- c# - 将十六进制字符串转换为二进制字符串
- python - 如何读取从 API 检索到的 JSON 并将其保存到 CSV 文件中?
- php - 为什么 laravel 不在 varchar 字段的数字查询周围加上引号?
- c++ - 有效地在 QPainterPath 周围绘制文本
- java - 插件 1 删除插件 2 类 (Maven)
- mongodb - 如果现有文档的时间戳早于预设时间,则插入 mongo 文档 - 使用 upsert
- python - 如何从表单中获取数据?