Pandas.DataFrame interpolate() 方法='线性'和'最近'返回尾随 NaN 不一致的结果

2024-04-26

我在探索pandas.DataFrame.interpolate()用不同的方法,linear vs. nearest,当尾部缺少数据时,我发现这两种方法的输出不同。

例如:

import pandas as pd # version: '0.16.2' or '0.20.3'
>>> a = pd.DataFrame({'col1': [np.nan, 1, np.nan, 3, np.nan, 5, np.nan]})
Out[1]: 
   col1
0   NaN
1   1.0
2   NaN
3   3.0
4   NaN
5   5.0
6   NaN

>>> a.interpolate(method='linear')
Out[2]: 
   col1
0   NaN
1   1.0
2   2.0
3   3.0
4   4.0
5   5.0
6   5.0

>>> a.interpolate(method='nearest')
Out[3]: 
   col1
0   NaN
1   1.0
2   1.0
3   3.0
4   3.0
5   5.0
6   NaN

看起来linear方法将对尾随 NaN 进行外推,而“最近”方法则不会,除非您指定fill_value = 'extrapolate':

>>> a.interpolate(method='nearest', fill_value='extrapolate')
Out[4]: 
   col1
0   NaN
1   1.0
2   1.0
3   3.0
4   3.0
5   5.0
6   5.0

所以我的问题是为什么这两种方法在处理尾随 NaN 时表现不同?这是它应该的样子还是一个错误?

两个版本的 pandas“0.16.2”和“0.20.3”也发现了相同的结果。

pandas.Series.interpolate()也显示了同样的问题。

有一个thread https://stackoverflow.com/questions/25255496/dataframe-interpolate-extrapolates-over-trailing-missing-data and a github问题 https://github.com/pandas-dev/pandas/issues/8000#issue-40056131谈论类似的问题但目的不同。我正在寻找这个问题的解释或结论。

EDIT:

更正:方法linear方法的行为不完全是extrapolation,你可以看到最后一行的填充值是 5 而不是 6。现在看起来更像是一个 bug,是吗?


@D.Weis 这是一个很好的问题,让我深入解释一下,没有线程和 github 问题。让我一步步解释。

>>> a = pd.DataFrame({'col1': [np.nan, 1, np.nan, 3, np.nan, 5, np.nan]})
Out[1]: 
   col1
0   NaN
1   1.0
2   NaN
3   3.0
4   NaN
5   5.0
6   NaN

1.)“线性”插值

在“线性”插值中,缺失值由两个最近的位置值填充。在“最近”插值中,它将通过最近的周围值填充缺失值,但是,在“最近”插值中,缺失值将具有与附近位置值相同的值。我在第 (2) 节中更深入地解释了“最近”插值。

“线性”插值示例:

    1   1.0    1. 1.0 
    2   NaN    2. 2.0
    3   3.0    3. 3.0
    4   NaN    4. 4.0

这里,第二个位置是空的。因此,为了填充它的值,它将采用第 1 和第 3 位置的值,分别为 1.0 和 3.0。再次记住,在“线性”插值中,只需要 2 个周围值即可填充缺失值。

(1.0+3.0/2) =2.0 = Answer for  2nd position. Similarly it will be for other values.

2.) 按“最近”插值

>>> a.interpolate(method='nearest')
Out[3]: 
   col1
0   NaN
1   1.0
2   1.0
3   3.0
4   3.0
5   5.0
6   NaN

基本上,在“最近”插值中,它用最近值中的相同值填充缺失值。例如,

1   1.0    1. 1.0 
2   NaN    2. 1.0
3   3.0    3. 3.0
4   NaN    4. 3.0

因此,在上面的示例中,您可以轻松地看到位置 2nd 与位置 1st 具有相同的值,因为它是最接近位置 1 的值。总之,请记住,在“最近”插值中,缺失值将在最近的周围值的帮助下由相同的值填充。

In method='nearest', fill_value='extrapolate'您可以在示例中看到它将用第五个位置的相同值填充最后一个值。该概念与填充缺失值的概念保持相同,如上所述。

笔记: 此外,还有其他插值方法,例如“双线性”、“双三次”等。这都是关于填充缺失值的准确性。

我的建议是,如果您想从“最近”插值和“线性”插值中进行选择。我会说使用“线性”插值,因为它会比“最近”插值更准确地填充值。

希望这会对您有所帮助。祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas.DataFrame interpolate() 方法='线性'和'最近'返回尾随 NaN 不一致的结果 的相关文章

  • 如何从字典构造defaultdict?

    如果我有d dict zip range 1 10 range 50 61 我怎样才能建立一个collections defaultdict出于dict 唯一的论点defaultdict似乎采取的是工厂功能 我必须初始化然后再经历原来的d并
  • 使用 scikit 确定每个特征对特定类别预测的贡献

    我正在使用 scikit 额外的树分类器 model ExtraTreesClassifier n estimators 10000 n jobs 1 random state 0 一旦模型拟合并用于预测类别 我想找出每个特征对特定类别预测
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • pandas 使用查询功能检查列是否为空

    我有 pandas 数据框 我想在它的查询函数上执行 isnull 或 not isnull 条件 如下所示 In 67 df data pd DataFrame a 1 20 None 40 50 In 68 df data Out 68
  • 无法从同一项目的 bin 目录导入模块

    我正在构建一个库 该库将通过 pip 包含在其他项目中 我有以下目录 venv 是 virtualenv project bin run py myproj init py logger py venv 我激活虚拟环境 在 bin run
  • Pythonic方式逐行读取文件?

    以下两种方法中逐行读取文件的 Pythonic 方法是什么 with open file r as f for line in f print line or with open file r as f for line in f read
  • 在 Spark-submit 上的 _find_and_load 中获取文件“”,第 991 行

    我目前使用的是Python 3 7 9 spark spark 2 4 6 bin hadoop2 6 在这个项目 venv 中 我的设置为 kafka python 2 0 2 pip 21 2 4 py4j 0 10 9 pyspark
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • Python 有哪些 SOAP 客户端库,它们的文档在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 matplotlib 中查看然后自动关闭图形?

    我必须检查我的参数设置是否正确 因此我需要绘制许多图 为了绘制这些图 我选择使用 matplotlib 每次检查后 我需要单击左上角的关闭按钮 这很微不足道 那么有没有什么方法可以让剧情在3 5秒左右显示并且无需点击就自动关闭呢 我知道关于
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • 在pycharm中使用多处理时如何调试

    我正在 pycharm 社区版中使用 anaconda2 调试多进程程序 它有几个后台工作进程 工作进程将检查输入队列以检索任务 而不会休眠 直到收到任务 事实上 我只对主要流程感兴趣 但是pycharm调试器总是单步进入子进程 看起来主进
  • 单个函数的 Numpy 均值和方差?

    使用 Numpy Python 是否可以从单个函数调用返回均值 AND 方差 我知道我可以单独做它们 但是计算样本标准差需要平均值 因此 如果我使用单独的函数来获取均值和方差 则会增加不必要的开销 我尝试在这里查看 numpy 文档 htt
  • 如何用不同的颜色填充seaborn.distplot中的区域

    是否可以用颜色填充两条阈值线 line1 和 line2 之外的区域 并通过 distplot 绘制的 KDE 曲线限制 Y 轴 代表我的应用程序的 3 sigmas import pylab as pl import seaborn as
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • 使用 PyODBC 选择表中的列名

    我正在编写一个 Python 程序 该程序使用 PyODBC 从 Microsoft Access mdb 文件中选择一些数据 我需要发现几个不同表的列名 在 SQL Server 中 这可以通过使用类似的查询来完成 SELECT c na
  • 如何使用 np.newaxis?

    What is numpy newaxis https numpy org doc stable reference constants html numpy newaxis我什么时候应该使用它 在一维数组上使用它x产生 gt gt gt
  • 设置restrict_xpaths设置后出现UnicodeEncodeError

    我是 python 和 scrapy 的新手 将restrict xpaths 设置设置为 table class lista 后 我收到了以下回溯 奇怪的是 通过使用其他 xpath 规则 爬虫可以正常工作 Traceback most
  • Python 装饰器只是语法糖? [复制]

    这个问题在这里已经有答案了 可能的重复 了解 Python 装饰器 https stackoverflow com questions 739654 understanding python decorators 我对使用 Python 装
  • 无法比较类型“ndarray(dtype=int64)”和“str”

    Example of data that I want to replace 数据具有以下属性 购买 V 高 高 中 低 维持 V 高 高 中 低 门 2 3 4 5 更多 2 4人以上 lug boot 小 中 大 安全性低 中高 这就是

随机推荐