![](/img/trans.png)
[英]In python pandas, how can I re-sample and interpolate a DataFrame?
[英]How can I interpolate values in a python dataframe?
我在python中有2列的数据框。 我想用一栏输入数据框并获取第二栏的值。 有时值可以是精确的,但也可以是2行之间的值。
我有这个示例数据框:
x y
0 0 0
1 10 100
2 20 200
如果我用x的值检查数据帧,我想找到y的值。 例如,如果我在数据框中输入的值为10,则得到的值为100。但是,如果我检查为15,则需要在y的两个值之间进行插值。 有功能吗?
您可以看一下Pandas
模块(doc)中提供的interpolate
方法。 但我不确定这是否能回答您的问题。
您可以通过sklearn
模块中的interp1d
此sklearn
。 插值的几种类型是可能的:“线性”,“最近”,“零”,“线性”,“二次”,“三次” ...您可以在(文档页面)上找到列表。
插值过程可以概括为三个步骤:
isna
(doc) interp1d
(doc) x
列)调用第2步中的函数find。 这里的代码:
# Import modules
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
# Data
df = pd.DataFrame(
[[0, 0],
[10, 100],
[11, np.NaN],
[15, np.NaN],
[17, np.NaN],
[20, 200]],
columns=["x", "y"])
print(df)
# x y
# 0 0 0.0
# 1 10 100.0
# 2 11 NaN
# 3 15 NaN
# 4 17 NaN
# 5 20 200.0
# Split data in training (not NaN values) and missing (NaN values)
missing = df.isna().any(axis=1)
df_training = df[~missing]
df_missing = df[missing].reset_index(drop=True)
# Create function that interpolate missing value (from our training values)
f = interp1d(df_training.x, df_training.y)
# Interpolate the missing values
df_missing["y"] = f(df_missing.x)
print(df_missing)
# x y
# 0 11 110.0
# 1 15 150.0
# 2 17 170.0
您可以在此链接上找到有关该主题的其他著作。
numpy.interp
是线性插值的最简单方法:
def interpolate(xval, df, xcol, ycol):
# compute xval as the linear interpolation of xval where df is a dataframe and
# df.x are the x coordinates, and df.y are the y coordinates. df.x is expected to be sorted.
return np.interp([xval], df[xcol], df[ycol])
根据您的示例数据,它给出了:
>>> interpolate(10, df, 'x', 'y')
>>> 100.0
>>> interpolate(15, df, 'x', 'y')
>>> 150.0
您甚至可以直接执行以下操作:
>>> np.interp([10, 15], df.x, df.y)
array([100., 150.])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.