Pandas数据填充的具体实现

 更新时间:2024年07月26日 10:00:43   作者:量化回测和PA交易  
在数据分析与预处理过程中,脏数据几乎不可避免,本文主要介绍了Pandas数据填充的具体实现,也称为缺失值处理,使数据清洗工作更加高效,感兴趣的可以了解一下

前言

在数据分析与预处理过程中,脏数据几乎不可避免,这直接影响到后续分析的准确性和可靠性。清洗数据中最常见的就是处理空值。Pandas DF的数据填充功能非常强大。本文介绍Pandas中常用的几种数据填充(也称为缺失值处理)方法,使数据清洗工作更加高效。

填充

fillna()是Pandas中最基础也是最灵活的填充缺失值方法。它允许你用特定的值、Series、DataFrame或前一个/后一个非空值来填充缺失值(NaN)。

常数填充

In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: data = {'A': [1, 2, np.nan], 'B': [5, np.nan, np.nan], 'C': [1, 2, 3]}
In [4]:  df = pd.DataFrame(data)
In [5]: df
Out[5]:
     A    B  C
0  1.0  5.0  1
1  2.0  NaN  2
2  NaN  NaN  3
In [6]: df.fillna(0)
Out[6]:
     A    B  C
0  1.0  5.0  1
1  2.0  0.0  2
2  0.0  0.0  3

Series填充

可以使用一个Series对不同列使用不同的值进行填充, 具体如下:

fill_values = pd.Series([10, 20, 30], index=['A', 'B', 'C'])

In [12]: df
Out[12]:
     A    B  C
0  1.0  5.0  1
1  2.0  NaN  2
2  NaN  NaN  3

In [13]: df.fillna(fill_values)
Out[13]:
      A     B  C
0   1.0   5.0  1
1   2.0  20.0  2
2  10.0  20.0  3

附近值填充

前向填充: 使用上一行的值

In [18]: df
Out[18]:
     A    B  C
0  1.0  5.0  1
1  2.0  NaN  2
2  NaN  NaN  3

In [19]: df.ffill()
Out[19]:
     A    B  C
0  1.0  5.0  1
1  2.0  5.0  2
2  2.0  5.0  3

后向填充: 使用后一行的值

In [22]: data = {'A': [1, 2, np.nan], 'B': [5, np.nan, 88], 'C': [1, 2, 3]}

In [23]: df = pd.DataFrame(data)

In [24]: df
Out[24]:
     A     B  C
0  1.0   5.0  1
1  2.0   NaN  2
2  NaN  88.0  3

In [25]: df.bfill()
Out[25]:
     A     B  C
0  1.0   5.0  1
1  2.0  88.0  2
2  NaN  88.0  3

同一行中指定列值进行填充

In [28]: df
Out[28]:
     A     B  C
0  1.0   5.0  1
1  2.0   NaN  2
2  NaN  88.0  3

In [29]: df['A']=df.apply(lambda row: row['C'] if pd.isnull(row['A']) else row['A'], axis=1)

In [30]: df
Out[30]:
     A     B  C
0  1.0   5.0  1
1  2.0   NaN  2
2  3.0  88.0  3

插值

插值法是一个非常有用的功能,通过插值进行填充可以保证一些时序数值相对合理和连续。这特别能够避免一些因为数据丢失原因产生的跳空出现。

线性插值

In [2]: data = {'A': [1, 2, np.nan, 4], 'B': [np.nan, 5, np.nan, 8]}
In [3]: df = pd.DataFrame(data)
In [4]: df
Out[4]:
     A    B
0  1.0  NaN
1  2.0  5.0
2  NaN  NaN
3  4.0  8.0
In [5]: df.interpolate()
Out[5]:
     A    B
0  1.0  NaN
1  2.0  5.0
2  3.0  6.5
3  4.0  8.0

时间序列插值

当df使用datetime作为索引时,支持基于时间的插值,如下代码给出了示例:

In [11]: date_index = pd.date_range(start='2024-06-25', periods=7, freq='D')
In [12]: dates_to_remove = pd.to_datetime(['2024-06-26', '2024-06-30'])
In [13]: date_index = date_index[~date_index.isin(dates_to_remove)]
In [14]: date_index
Out[14]:
DatetimeIndex(['2024-06-25', '2024-06-27', '2024-06-28', '2024-06-29',
               '2024-07-01'],
              dtype='datetime64[ns]', freq=None)
In [15]: data_ts = {'Value': [1, 2, np.nan, np.nan, 8]}
In [16]: pd.DataFrame(data_ts, index=date_index)
Out[16]:
            Value
2024-06-25    1.0
2024-06-27    2.0
2024-06-28    NaN
2024-06-29    NaN
2024-07-01    8.0
# 对比普通线性插值和时间序列插值
In [17]: pd.DataFrame(data_ts, index=date_index).interpolate()
Out[17]:
            Value
2024-06-25    1.0
2024-06-27    2.0
2024-06-28    4.0
2024-06-29    6.0
2024-07-01    8.0
In [18]: pd.DataFrame(data_ts, index=date_index).interpolate(method='time')
Out[18]:
            Value
2024-06-25    1.0
2024-06-27    2.0
2024-06-28    3.5
2024-06-29    5.0
2024-07-01    8.0

Pandas的插值函数基于scipy.interpolate.interp1d — SciPy v1.13.1 Manual, 同时也支持SciPy的几个‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial等不同的插值类型。具体不同插值类型可以在遇到需要的时候,深入阅读文档研究,本文不在重复赘述。

到此这篇关于Pandas数据填充的具体实现的文章就介绍到这了,更多相关Pandas数据填充内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中nonlocal的作用域灵活控制

    Python中nonlocal的作用域灵活控制

    nonlocal关键字为我们提供了一种在嵌套函数中访问和修改外部非全局作用域变量的方式,本文主要介绍了Python中nonlocal的作用域灵活控制,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Python实现数据库与Excel文件之间的数据自动化导入与导出

    Python实现数据库与Excel文件之间的数据自动化导入与导出

    数据库和Excel文件是两种常见且重要的数据存储方式,本文将介绍如何使用Python有效地实现数据库与Excel文件之间的数据自动化导入与导出,以SQLite数据库为例,需要的朋友可以参考下
    2024-06-06
  • Python异常信息的不同展现方法总结

    Python异常信息的不同展现方法总结

    在日常开发的过程中,当代码报错时,我们通常要不断打印、阅读traceback提示信息,来调试代码,这篇文章介绍了如何实现一个Exception Hooks,使得traceback模块的提示信息更加精确;同时还介绍了一些第三方库,这些库也提供了Exception Hooks的功能
    2022-11-11
  • Python 数据处理更容易的12个辅助函数总结

    Python 数据处理更容易的12个辅助函数总结

    Python的产生似乎就是专门用来处理数据的,顺理成章的成为大数据的主流语言,本文介绍十二个函数辅助你更容易更便捷的用Python进行数据处理
    2021-11-11
  • pycharm日志总是弹出“无法运行Git,未安装Git”的问题

    pycharm日志总是弹出“无法运行Git,未安装Git”的问题

    这篇文章主要介绍了pycharm日志总是弹出“无法运行Git,未安装Git”的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • sqlalchemy实现时间列自动更新教程

    sqlalchemy实现时间列自动更新教程

    这篇文章主要介绍了sqlalchemy实现时间列自动更新教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 详解python statistics模块及函数用法

    详解python statistics模块及函数用法

    本节介绍 Python 中的另一个常用模块 —— statistics模块,该模块提供了用于计算数字数据的数理统计量的函数。这篇文章重点给大家介绍python statistics 模块的一些用法,感兴趣的朋友跟随小编一起看看吧
    2019-10-10
  • 一文了解Python3的错误和异常

    一文了解Python3的错误和异常

    Python 的语法错误或者称之为解析错,是初学者经常碰到的。即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。本文就来和大家聊聊Python3的错误和异常,感兴趣的可以学习一下
    2022-09-09
  • Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决

    Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决

    这篇文章主要介绍了Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python映射列表实例分析

    python映射列表实例分析

    这篇文章主要介绍了python映射列表,实例分析了python映射列表遍历计算其中每一个元素的使用技巧,需要的朋友可以参考下
    2015-01-01

最新评论