python - 通过重复最后一行来增加数据帧中每 1 秒的采样频率

标签 python pandas

我有一个可变采样频率<30 Hz 的数据帧。我想通过每秒重复数据帧的最后一行来将采样频率增加到 30。 我的数据帧中的时间戳列没有毫秒。该秒的所有行都会重复相同的时间戳。此外,数据不是连续的,中间缺少一些秒数。 我的数据框 df 包含列 ['Timestamp','vm','angle']

这是我尝试过的

def samfreq(args):
    size = len(args)
    inc= 30-size
    args=args.append( args.iloc[[-1]*inc] )
    args = args.reset_index(drop=True)
    return args


df= df.resample('1S',on='Timestamp').apply(samfreq)

运行上面的代码给我这个错误

IndexError: positional indexers are out-of-bounds

如果数据是连续的,我认为我不会收到上述错误。如何提高数据中所有秒数的采样频率,忽略中间丢失的秒数。

这里是一个示例代码,用于生成与我正在处理的数据类似的数据。我故意错过了数据中的一秒钟来模仿我的数据。

d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:47', end='2016-04-15 10:36:47', periods=12), 'vm': np.random.randn(12),'angle':np.random.randn(12)}
df = pd.DataFrame(data=d)
d = {'Timestamp': pd.date_range(start='2016-04-15 10:36:49', end='2016-04-15 10:36:49', periods=15), 'vm': np.random.randn(15),'angle':np.random.randn(15)}
df1 = pd.DataFrame(data=d)
df = df.append(df1,ignore_index=True)

我如何让它发挥作用?

最佳答案

只需使用groupby而不是resample,它就会按照您的预期工作:

df.groupby('Timestamp').apply(samfreq).reset_index(drop = True)

关于python - 通过重复最后一行来增加数据帧中每 1 秒的采样频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531276/

相关文章:

python - 从域名地址中提取名称实体

python - Pandas 对正负数序列的计数

python - 使用名称从网站上抓取数据表

python - 将不同 DataFrame 中的元素收集到数组中

python-3.x - 在 python3 上的 DataFrame 中标记假期

python - 根据二维元组的第二个索引查找 k 最小值

python - 如何测试将数据发送到接收器的 Faust 代理?

用于创建 dict of dict of list 的 Python 习惯用法

python - 将 headless CSV 读取到 pandas 数据帧并解析日期

python - 如何调试 "str object is not callable"?