Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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 数据帧的线性近似_Python_Pandas - Fatal编程技术网

Python 数据帧的线性近似

Python 数据帧的线性近似,python,pandas,Python,Pandas,如何找出块7的线性近似值DF Block DF 0 1.2 1 2.3 4 4.2 5 5.6 6 4.3 10 2.2 使用最近的两个数据点 (7,???) 如何实现查找两个最近的数据点?您可以使用numpy.interp函数查找插值: (6, 4.3) (10, 2.2)? 更多信息 您还可以使用scipy.interpolate包中的interp1d: import numpy as np np.interp(7, df.block,

如何找出块7的线性近似值DF

Block DF
0     1.2
1     2.3
4     4.2
5     5.6
6     4.3
10    2.2
使用最近的两个数据点

(7,???)

如何实现查找两个最近的数据点?

您可以使用
numpy.interp
函数查找插值:

(6, 4.3) 
(10, 2.2)? 
更多信息

您还可以使用
scipy.interpolate
包中的
interp1d

import numpy as np
np.interp(7, df.block, df.DF)
# >>> 3.775

我在问题上看到了“pandas”标签,并尝试将pandas用于此实现。查看代码:

from scipy.interpolation import interp1d
f = interp1d(df.block, df.DF)
xnew = np.linspace(0, 10, num=11, endpoint=True)
zip(xnew, f(xnew))
# [(0.0, 1.2),
# (1.0, 2.2999999999999998),
# (2.0, 2.9333333333333331),
# (3.0, 3.5666666666666664),
# (4.0, 4.2000000000000002),
# (5.0, 5.5999999999999996),
# (6.0, 4.2999999999999998),
# (7.0, 3.7749999999999999),
# (8.0, 3.25),
# (9.0, 2.7250000000000001),
# (10.0, 2.2000000000000002)]
输出应为:

0.1.200000 1 2.300000 2 2.933333 3 3.566667 4 4.200000 5 5.600000 6 4.300000 7 3.775000 8 3.250000 9 2.725000 10 2.200000
dtype:float64

此函数是否适用于datetime?假设
datetime
的值为整数。但是您可能需要将插值取整回整数,以便它是一个有效的
datetime
尝试以下操作:
s=pd.Series([1.2,2.3,4.2,5.6,4.3,np.nan,np.nan,np.nan,np.nan,2.2],index=[0,1,4,5,6,7,8,9,10])
ans=s.interpolate(method='linear')
-然后您将得到相同的结果…@maxU我尝试了您的解决方案,但它生成了一个错误,表示您需要在序列和索引上具有相同数量的数字。但是,您让我了解了如何解决问题。我刚刚编辑了我的答案。
import pandas as pd
import numpy as np

s = pd.Series([1.2,2.3,np.nan,np.nan,4.2,5.6,4.3,np.nan,np.nan,np.nan,2.2], index=[0,1,2,3,4,5,6,7,8,9,10])
ans = s.interpolate(method='linear')
print(ans)