Python 将一个时间序列插值到自定义时间序列上

Python 将一个时间序列插值到自定义时间序列上,python,pandas,Python,Pandas,目标:将一个时间序列插入另一个自定义时间序列 我检查了堆栈溢出,发现如下内容。但是,我得到以下错误: ValueError: cannot reindex from a duplicate axis 问题:我需要使用datetimeindex还是Unix时间戳也可以使用?因为前者需要转换为datetimeindex,然后插值,再转换回unixtimestamp。这是多个步骤,我想避免 以下是我所拥有的: 我想插入的时间序列: In [111]: p.head() Out[111]:

目标:将一个时间序列插入另一个自定义时间序列

我检查了堆栈溢出,发现如下内容。但是,我得到以下错误:

 ValueError: cannot reindex from a duplicate axis
问题:我需要使用datetimeindex还是Unix时间戳也可以使用?因为前者需要转换为datetimeindex,然后插值,再转换回unixtimestamp。这是多个步骤,我想避免

以下是我所拥有的:

我想插入的时间序列:

In [111]: p.head()
Out[111]:
       Timestamp  Pressure  Quality
0  1477294046400    101155        3
1  1477294046901    101152        3
2  1477294047421    101150        3
3  1477294047922    101151        3
4  1477294048425    101151        3
以及自定义时间序列:

In [112]: a.head()
Out[112]:
            Time
0  1477294032458
1  1477294032463
2  1477294032468
3  1477294032473
4  1477294032478
按照上面链接中的解决方案,我执行了以下操作:

pressure = pd.concat([p, a]).sort_index().interpolate().reindex(a.index)

但我得到一个错误,如上所示

您没有提供足够的信息,所以我创建了自己的。你必须注意并调整它以适应你的需要

这一回答是针对一个问题给出的

设置

p = pd.DataFrame(
    dict(
        Pressure=[101155, 101152, 101150, 101151, 101151],
        Quality=[3, 3, 3, 3, 3]
    ),
    pd.Index([0, 10, 20, 30, 40], name='Timestamp')
)

a = [5, 12, 18, 24, 33, 35, 37]
idx = p.index.union(a)
p.reindex(idx).interpolate('index')

p

总体战略

p = pd.DataFrame(
    dict(
        Pressure=[101155, 101152, 101150, 101151, 101151],
        Quality=[3, 3, 3, 3, 3]
    ),
    pd.Index([0, 10, 20, 30, 40], name='Timestamp')
)

a = [5, 12, 18, 24, 33, 35, 37]
idx = p.index.union(a)
p.reindex(idx).interpolate('index')

p
  • 确保时间戳位于
    p
  • p.index
    (您的时间戳)和新的时间列表
    a
  • 与工会重新编制索引。NaN将显示“新”索引值
  • 插值时,请使用
    method='index'
代码

p = pd.DataFrame(
    dict(
        Pressure=[101155, 101152, 101150, 101151, 101151],
        Quality=[3, 3, 3, 3, 3]
    ),
    pd.Index([0, 10, 20, 30, 40], name='Timestamp')
)

a = [5, 12, 18, 24, 33, 35, 37]
idx = p.index.union(a)
p.reindex(idx).interpolate('index')

p


尝试将
时间戳
时间
分别设置为索引轴,然后执行插值,看看是否有效。从字面上看,错误消息告诉您
pd.concat([p,a]).sort_index().interpolate()在索引中有重复项
。问题是你真正想要的索引是什么,你想做什么?@NickilMaveli的建议似乎是你想要做的?可能您需要后退一步,考虑concat/merge步骤,并确保这是您想要的。在
a
中的所有时间都在
p
中的时间之前。这不是插值,而是向后外推。第二个命令导致以下错误:TypeError:无法根据规则“safe”将数组数据从dtype('O')转换为dtype('float64')。有什么想法吗?请注意,在我的示例中,a是一个数据帧,而不是一个列表。所以,为了符合你的建议,我做了一个.set_索引('Timestamp',inplace=True)。这给了我一个索引数据帧。所有变量的数据类型都是int64。
p.set\u index('Timestamp',inplace=True)
idx=p.index.union(a.Time)
谢谢。上述代码有效。最后一件事。给定“a”,我只想包括a的值,而不包括p的值。例如,最终结果应仅具有[5,12,18,24,33,35,37]处的压力值,而不是[0,10,20,30,40]处的压力值,这些压力值最初为p。有什么想法吗?谢谢p、 重新索引(idx).插值('index')。重新索引(a.Time)