具有对数采样时间间隔的熊猫数据帧插值

时间:2020-09-23 04:49:45

标签: python pandas dataframe scipy interpolation

我有一个熊猫数据框,其中以分钟为单位的“时间”列和从数据记录器中提取的“值”。数据以对数时间间隔记录,这意味着第一个值以小数分钟记录,然后随着时间的推移,时间间隔变长:

print(df)
      Minutes   Value
0       0.001    0.00100
1       0.005    0.04495
2       0.010    0.04495
3       0.015    0.09085
4       0.020    0.11368
..        ...        ...
561  4275.150  269.17782
562  4285.150  266.90964
563  4295.150  268.35306
564  4305.150  269.42984
565  4315.150  268.37594

我想在0到4315分钟之间以一分钟的间隔线性插值'值'。

我尝试了df.interpolate()的一些不同迭代,但是没有成功。有人可以帮我吗?谢谢

2 个答案:

答案 0 :(得分:0)

我认为我的问题很基本,或者我提出了一个令人困惑的问题。无论哪种方式,我都只写了一个小循环来解决我的问题,觉得自己应该分享它。我确信这不是我所要求的最有效的方式,希望有人可以提出更好的方法来实现这一目标。这整个事情我还是很新。

首先要进行一些合格的事情:

  1. 我所说的“价值”数据称为“亏损”,是指水位与水井中初始初始水位之间的差异。从0开始。

  2. 此类数据通常在半对数图中查看,有时可以更容易地将0替换为极低的数字(即0.0001),以便在其他程序中轻松绘制。

此代码采用列名为“ Minutes”和“ Drawdown”的.csv文件,并将时间值与从0到数据集结尾的新的分钟参考数据帧进行比较。它将2个最接近的时间值引用到列表中所需的时间值,并对这些值进行加权平均,然后创建一个新的带有分钟数的整数分钟的csv。

干杯!

# -*- coding: utf-8 -*-
"""
Created on Tue Sep 22 13:42:29 2020

@author: cmeyer
"""

import pandas as pd
import numpy as np

df=pd.read_csv('Read_in.csv')
length=len(df)-1
last=df.at[length,'Drawdown']
lengthpump=int(df.at[length,'Minutes'])
minutes=np.arange(0,lengthpump,1)
dfminutes=pd.DataFrame(minutes)
dfminutes.columns = ['Minutes']
for i in range(1, lengthpump, 1):

    non_uni_minutes=df['Minutes']
    uni_minutes=dfminutes.at[i,'Minutes']

    close1=non_uni_minutes[np.argsort(np.abs(non_uni_minutes-uni_minutes))[0]]
    close2=non_uni_minutes[np.argsort(np.abs(non_uni_minutes-uni_minutes))[1]]

    index1 = np.where(non_uni_minutes == close1)
    index1 = int(index1[0])
    index2 = np.where(non_uni_minutes == close2)
    index2 = int(index2[0])

    num1=df.at[index1,'Drawdown']
    num2=df.at[index2,'Drawdown']

    weight1 = 1-abs((i-close1)/i)
    weight2 = 1-abs((i-close2)/i)

    Value = (weight1*num1+weight2*num2)/(weight1+weight2)

    dfminutes.at[i,'Drawdown'] = Value
dfminutes.at[0,'Drawdown'] = 0.000001
dfminutes.at[0,'Minutes'] = 0.000001
dfminutes.to_csv('integer_minutes_drawdown.csv')

答案 1 :(得分:0)

在这里,我使用numpy.interp实现了有效的解决方案。我已经编码了一种从字符串中读取数据到void中的奇特方式,您可以使用任何更简单的合适方式来满足您的需求,例如pandas.DataFrame

Try next code here online!

pandas.read_csv(...)