Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas/Scipy中的特定插值方法_Python_Pandas_Numpy_Scipy - Fatal编程技术网

Python Pandas/Scipy中的特定插值方法

Python Pandas/Scipy中的特定插值方法,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,首先创建数据: import pandas as pd import numpy as np %matplotlib inline data = pd.DataFrame({'time':np.arange(10)}) data['sin_of_the_times']= np.sin(data.time) newdata = pd.DataFrame({'time': np.linspace(0,10,15)}) newdata['sin_of_the_times'] = np.NAN data

首先创建数据:

import pandas as pd
import numpy as np
%matplotlib inline
data = pd.DataFrame({'time':np.arange(10)})
data['sin_of_the_times']= np.sin(data.time)
newdata = pd.DataFrame({'time': np.linspace(0,10,15)})
newdata['sin_of_the_times'] = np.NAN
data['interpolated']=False
newdata['interpolated']= True
ultimatedata = pd.concat([data, newdata])
ultimatedata.sort_values('time', inplace=True)
这就给了你:

    time    sin_of_the_times    interpolated
0   0.000000    0.000000    False
0   0.000000    NaN         True
1   0.714286    NaN         True
1   1.000000    0.841471    False
2   1.428571    NaN         True
2   2.000000    0.909297    False
...
在不生成新函数的情况下Python中是否存在一种插值方法,该方法将采用:

  • 第一个NaN表示时间=0.0是0%,从时间=0到时间=1.0,因此是0到8之间的0%,因此将是0.0
  • 第二个NaN将是0到1之间的7/10(ish),因此是0到0.841471之间的7/10,因此它将是.5890297
  • 第三个NaN将是1和2之间的4/10(ish),因此也是0.841471和0.909297之间的4/10

这种插值方法有名字吗?(在本例中是向上采样)插值方法似乎只基于一列。

您仍然希望进行线性插值;您只需要指定点之间的距离取决于时间,而不是假设它们的间距相等。因此,首先将索引设置为
time
,然后使用
interpolate

df = df.set_index('time')
df.sin_of_the_times.interpolate(method='index')
输出:
这就是我的出发点:
df

       time  sin_of_the_times
0  0.000000          0.000000
0  0.000000               NaN
1  0.714286               NaN
1  1.000000          0.841471
2  1.428571               NaN
2  2.000000          0.909297

你仍然想做一个线性插值;您只需要指定点之间的距离取决于时间,而不是假设它们的间距相等。因此,首先将索引设置为
time
,然后使用
interpolate

df = df.set_index('time')
df.sin_of_the_times.interpolate(method='index')
输出:
这就是我的出发点:
df

       time  sin_of_the_times
0  0.000000          0.000000
0  0.000000               NaN
1  0.714286               NaN
1  1.000000          0.841471
2  1.428571               NaN
2  2.000000          0.909297

numpy

np.interp(df['time'].values,
          df.dropna()['time'].values,
          df.dropna()['sin_of_the_times'].values)
Out[783]: 
array([0.        , 0.        , 0.60105095, 0.841471  , 0.87053926,
       0.909297  ])


#df['sin_of_the_times']= np.interp(df['time'].values,
#                           df.dropna()['time'].values,
#                            df.dropna()['sin_of_the_times'].values)

numpy

np.interp(df['time'].values,
          df.dropna()['time'].values,
          df.dropna()['sin_of_the_times'].values)
Out[783]: 
array([0.        , 0.        , 0.60105095, 0.841471  , 0.87053926,
       0.909297  ])


#df['sin_of_the_times']= np.interp(df['time'].values,
#                           df.dropna()['time'].values,
#                            df.dropna()['sin_of_the_times'].values)