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)