繁体   English   中英

如何在python数据框中插入值?

[英]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模块中的interp1dsklearn 插值的几种类型是可能的:“线性”,“最近”,“零”,“线性”,“二次”,“三次” ...您可以在(文档页面)上找到列表。

插值过程可以概括为三个步骤:

  1. 拆分缺失非缺失值之间的数据。 我使用isna (doc)
  2. 使用不丢失值的数据创建插值函数 我使用interp1d (doc)
  3. 插值 (预测缺失值)。 只需对丢失的数据(第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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM