时间插值d

2024-05-28 22:47:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对精确的时间插值有点小问题。你知道吗

一个单独的文件给了我一个类似这样的时间数组。为了清晰起见,在本例中,我对两个时间列使用相同的时间范围:

import pandas as pd
import numpy as np

df_time   = pd.DataFrame({
'TIMETAG': ['13:52:41.562', '13:52:41.640', '13:52:41.749', '13:52:41.838',\
            '13:52:41.948', '13:52:42.048', '13:52:42.138',\
            '13:52:42.258', '13:52:42.398', '13:52:42.584', '13:52:42.584',\
            '13:52:42.692', '13:52:42.879', '13:52:42.957',\
            '13:52:43.066', '13:52:43.176', '13:52:43.269', '13:52:43.363',\
            '13:52:43.472', '13:52:43.597', '13:52:43.722',\
            '13:52:43.815', '13:52:43.987', '13:52:44.065', '13:52:44.190',\
            '13:52:44.299', '13:52:44.392', '13:52:44.486',\
            '13:52:44.595', '13:52:44.673', '13:52:44.798', '13:52:44.970',\
            '13:52:45.001', '13:52:45.094', '13:52:45.235']})

我使用以下命令将其转换为毫秒:

timerange = pd.to_datetime(df_time['TIMETAG'])
timeit    = timerange.astype('int64')//(10**6) 

时间标签最初有500多行,采样率接近100毫秒,但我仍然调整它,使每个时间步正好是100毫秒

timerange = np.arange(np.amin(timeit), np.amax(timeit), 100)

我需要插入一个单独的数据帧,它已经有一个时间列,但是只有58个元素(因此采样大约低9倍)。这个数据帧必须插入到timeit数组中。你知道吗

df   = pd.DataFrame({
'TIMETAG2' : ['13:52:41.562', '13:52:42.238', '13:52:42.558' ,\
                              '13:52:42.879', '13:52:43.176' ,\
              '13:52:43.597', '13:52:44.299', '13:52:44.595' ,\
                              '13:52:44.970', '13:52:45.235'],

 '350.0'    : [13.108239, 12.398412, 13.020835, 14.030805, 13.852628   ,\
               13.901151, 13.050930, 12.642002, 11.864150, 11.297425  ],

 '400.0'    : [22.551765, 22.186752, 22.603124, 24.662806, 24.108199   ,\
               24.057507, 23.258363, 22.721349, 21.300732, 20.733452  ],


 '450.0'    : [32.221240, 32.621537, 32.367137, 35.565543, 34.632190   ,\
               34.444403, 34.098969, 33.486451, 31.556474, 31.584678  ],

 '500.0'    : [33.460819, 34.410052, 33.755817, 36.839105, 35.827079   ,\
                                   35.691536,      35.732444,      35.349296,      33.618491,     34.132295  ],

                '550.0'    : [     32.423253,      33.517339,      32.708333,      35.677932,     34.682384   ,\
                                   34.515653,      34.753437,      34.456637,      32.790737,     33.458967  ],

                '600.0'    : [     28.563580,      29.187609,      28.715661,      31.343185,     30.541189   ,\
                                   30.366380,      30.278298,      29.895978,      28.392532,     28.646102]
                            })

同样,我将时间列转换为毫秒:

df_timetag = pd.to_datetime(df['TIMETAG2'])
df_timeit  = df_timetag.astype('int64')//(10**6)

将时间戳设置为索引,我尝试使用以下命令进行插值:

df['TIMETAG2'] = df_timeit
df1            = df.set_index('TIMETAG2')
df2            = df1.reindex(timerange)

除了第一排,df2全是南区。你知道吗

df3 = df2.interpolate(axis=0, limit_direction='both')

插值后,每列中的所有值实际上相等。你知道吗

当我使用长度为530 vs 60的时间数组(从数据帧)时,也会发生同样的情况。这是一个简单的例子。你知道吗

我的问题是:当时间范围相同,但一个数组的元素比另一个数组多得多时,如何才能成功地按时间插值?你知道吗


Tags: 数据importdataframedftimeasnp时间
1条回答
网友
1楼 · 发布于 2024-05-28 22:47:52

问题是在重新索引行-检查更正,如果你需要它。现在起作用了

df2 = df1.reindex(index=df1.index.union(timerange))
df3 = df2.interpolate(axis=0, limit_direction='both')

如果只需要包含时间范围数组中的值的索引:

df4 = df3.loc[timerange]

相关问题 更多 >

    热门问题