关于Pandas的数据填充

前言

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

填充

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

常数填充


In [1]: import pandas as pdIn [2]: import numpy as npIn [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  3In [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  3In [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  3In [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  3In [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  3In [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.0In [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.0In [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等不同的插值类型。具体不同插值类型可以在遇到需要的时候,深入阅读文档研究,本文不在重复赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

35岁,是终点?还是拐点?

35岁,是终点还是拐点,取决于我们对生活和事业的态度、目标以及行动。这个年龄可以看作是一个重要的转折点,具有多重意义和可能性。 很多人在35岁时,已经在自己的职业生涯中建立了一定的基础,可能达到了管理层或专家级别…

Python量化交易学习——Part8:带有技术因子指标的多因子策略

技术面分析又称技术分析(Technical Analysis ),是股票投资分析的专业术语。技术分析研究以往价格和交易量数据,进而预测未来的价格走向。此类型分析侧重于图表与公式的构成,以捕获主要和次要的趋势,并通过估测市场周期长短,识别买入 / 卖出机会。根据您选择的时间跨度,…

Charles抓包工具系列文章(二)-- Repeat 回放http请求

一、什么是http请求回放 当我们对客户端进行抓包,经常会想要重试http请求,或者改写原有部分进行重新请求,都需要用到回放http请求。 还有一种场景是压力测试,对一个请求进行重复请求多少次,并加上适当的并发度。 这里…

【PythonWeb开发】Flask视图函数传递数据到前端模版的方法总结。

在Flask框架中,视图函数返回响应有四种常见方式,都得掌握。 一、返回文本内容 可以直接返回字符串,Flask会自动将其转换为一个响应对象,具有默认的text/html内容类型。 app.route(/return_text) def return_text():return "…

力扣第211题“添加与搜索单词 - 数据结构设计”

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在本篇文章中,我们将详细解读力扣第211题“添加与搜索单词 - 数据结构设计”。通过学习本篇文章,读者将掌握如何实现一个支持通配符搜索的字典数据结构&…

WebStorm 配置 PlantUML

1. 安装 PlantUML 插件 在 WebStorm 插件市场搜索 PlantUML Integration 并安装,重启 WebStorm 使插件生效。 2. 安装 Graphviz PlantUML 需要 Graphviz 来生成图形。使用 Homebrew 安装 Graphviz: 打开终端(Terminal)。确保你…

java的Nio演进

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 java的Nio演进 前言简介正文总结 前言 在JDK1.4推出JavaNIO之前,基于Java的所有Socket通信都采用了同步阻塞模式 (BIO),这种一请求一应答的通信模型简化了上层的应用开发,但…

C语言小例程28/100

题目&#xff1a;利用递归方法求5!。 程序分析&#xff1a;递归公式&#xff1a;fnfn_1*4! #include <stdio.h>int main() {int i;int fact(int);for(i0;i<6;i){printf("%d!%d\n",i,fact(i));} } int fact(int j) {int sum;if(j0){sum1;} else {sumj*fac…

消防认证-防火门

一、消防认证 消防认证是指消防产品符合国家相关技术要求和标准&#xff0c;且通过了国家认证认可监督管理委员会审批&#xff0c;获得消防认证资质的认证机构颁发的证书&#xff0c;消防产品具有完好的防火功能&#xff0c;是住房和城乡建设领域验收的重要指标。 二、认证依…

嵌入式系统中串口通信粘包问题的解决方案(C语言)

文章目录 0. 引言1. 什么是粘包问题&#xff1f;2. 粘包问题的影响3. 处理粘包问题的思路4. 不同处理方法的优缺点分析5. 实现方案5.1 数据包格式5.2 代码实现 0. 引言 在嵌入式系统中&#xff0c;串口通信是一种常见且重要的数据传输方式。然而&#xff0c;由于硬件和软件的限…

闪迪sd卡视频格式化数据恢复方法,你了解吗

咨询&#xff1a;“我不小心将闪迪SD卡格式化了&#xff0c;里面的重要视频文件全都不见了。我感到非常焦虑&#xff0c;因为这些视频对我来说意义非凡。现在急需找到方法来恢复&#xff01;&#xff01;” 在数字时代&#xff0c;SD卡已成为我们日常生活中不可或缺的数据存储设…

python中数据的作用域

一、命名空间 在 Python 中&#xff0c;命名空间是一个系统&#xff0c;它用于确保名字的唯一性&#xff0c;并防止命名冲突。命名空间是一个存储变量名称&#xff08;或者更广泛地说&#xff0c;标识符&#xff09;与对象之间映射的抽象概念。每个变量名你在程序中创建&#x…

本篇内容:ArkTS开发系列之事件(2.8.1触屏、键鼠、焦点事件)

上篇回顾&#xff1a; ArkTS开发系列之导航 (2.7动画&#xff09; 本篇内容&#xff1a;ArkTS开发系列之事件&#xff08;2.8.1触屏、键鼠、焦点事件&#xff09; 一、知识储备 1. 触屏事件&#xff1a;包括点击事件、拖拽事件、触摸事件。 点击事件 Button()....onClick(…

msvcp120.dll丢失怎么办,找不到msvcp120.dll的多种解决方法

最近&#xff0c;我在运行一个程序时遇到了一个错误&#xff0c;系统提示找不到msvcp120.dll文件&#xff0c;无法继续执行代码。这让我感到非常困扰&#xff0c;因为这个问题导致我无法正常运行这个程序。经过一番搜索和尝试&#xff0c;我找到了几种修复这个问题的方法&#…

如何开发、使用 Starter

开发 第一步&#xff1a;创建starter工程hello-spring-boot-starter并配置pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchem…

SpringBoot优点达项目实战:项目初始化(一)

SpringBoot优点达项目实战&#xff1a;项目初始化&#xff08;一&#xff09; 文章目录 SpringBoot优点达项目实战&#xff1a;项目初始化&#xff08;一&#xff09;1、项目介绍2、项目搭建3、依赖导入4、数据准备 1、项目介绍 技术框架 SpringbootmybatisPlusvueknife 2、项目…

什么是生成式AI?

生成式AI&#xff08;Generative AI&#xff09;是一类利用机器学习和人工智能技术来生成内容的系统。这些系统可以创建文本、图像、音乐、视频等各种类型的内容。生成式AI通过学习大量的数据来理解和模仿人类的创作过程&#xff0c;从而生成新的、原创的内容。以下是生成式AI的…

创建App

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Django项目中&#xff0c;推荐使用App来完成不同模块的任务&#xff0c;通过执行如下命令可以启用一个应用程序。 python manage.py startapp app…

RT-Thread的Finsh实现学习

学习原因 工作中&#xff0c;使用同事开发的调试软件&#xff0c;输入参数打印的函数名就可以打印参数&#xff0c;但看不到代码实现&#xff0c;只能用自己微薄的知识积累去猜一下&#xff0c;之前尝试过&#xff0c;专门写一个函数&#xff0c;去解析编译生成的map文件&#…

名侦探李先生第一话:谁是真正的凶手(只出现一次的数字相关题解(力扣)+位操作符回忆)

引子&#xff1a;我们在之前的案子中破解过基础的单身狗问题&#xff0c;那面对更有挑战的案子&#xff0c;且看李先生如何破局&#xff0c;那下凶手&#xff01; 复习&#xff1a; 1&#xff0c;位操作符&#xff1a; 正整数原&#xff0c;反&#xff0c;补码都相同 首位是…