当前位置: 首页 > news >正文

数学建模_缺失值处理_拉格朗日、牛顿插值(全)

- 缺失值处理

1. 识别缺失值

在处理缺失值之前,首先需要识别数据中的缺失值。

1.1 使用 isna()isnull()

Pandas 提供了 isna()isnull() 方法来检测缺失值,二者功能相同。

import pandas as pddf = pd.DataFrame({'A': [1, 2, None, 4],'B': [None, 2, 3, 4],'C': [1, None, None, 4]
})# 检测缺失值
print(df.isna())
1.2 汇总缺失值

使用 sum() 可以汇总缺失值的数量。

# 每列缺失值的数量
print(df.isna().sum())# 每行缺失值的数量
print(df.isna().sum(axis=1))

2. 删除缺失值

有时删除缺失值是最佳选择,特别是当缺失值较多或数据无用时。

2.1 删除包含缺失值的行

使用 dropna() 删除包含缺失值的行。

df_cleaned = df.dropna()
print(df_cleaned)
2.2 删除包含缺失值的列

通过设置 axis=1,可以删除包含缺失值的列。

df_cleaned = df.dropna(axis=1)
print(df_cleaned)
2.3 根据特定条件删除缺失值

使用 thresh 参数可以保留至少有指定数量非缺失值的行或列。

df_cleaned = df.dropna(thresh=2)
print(df_cleaned)

3. 填充缺失值

填充缺失值是一种常用的策略,特别是在不能删除数据的情况下。

3.1 使用固定值填充

使用 fillna() 方法可以用指定的值填充缺失值。

df_filled = df.fillna(0)
print(df_filled)
3.2 使用前向或后向填充

使用 method 参数选择前向填充(ffill)或后向填充(bfill)。

# 前向填充
df_filled = df.fillna(method='ffill')
print(df_filled)# 后向填充
df_filled = df.fillna(method='bfill')
print(df_filled)
3.3 使用均值、中位数或众数填充

可以根据列的统计值进行填充,如均值、中位数或众数。

# 用列的平均值填充
df_filled = df.fillna(df.mean())
print(df_filled)# 用列的中位数填充
df_filled = df.fillna(df.median())
print(df_filled)# 用列的众数填充
df_filled = df.fillna(df.mode().iloc[0])
print(df_filled)

4. 替换特定值

有些数据集中缺失值可能被标记为特定的值,如 -999。可以将这些值替换为 NaN。

df_replaced = df.replace(-999, pd.NA)

5. 插值法填充缺失值

插值法通过已有数据来估算未知数据点。

5.1 线性插值

Pandas 提供 interpolate() 方法进行插值填充。

df_interpolated = df.interpolate(method='linear')
print(df_interpolated)
5.2 时间序列插值

如果数据是时间序列,可以使用 time 方法进行插值。

df_time_interpolated = df.interpolate(method='time')
print(df_time_interpolated)

6. 拉格朗日插值法填充缺失值

拉格朗日插值法基于所有数据点构建多项式,从而估算缺失值。

6.1 拉格朗日插值法的基本概念

拉格朗日插值多项式 L(x)L(x)L(x) 通过构造基函数 li(x)l_i(x)li(x) 并将其线性组合来估算缺失值。

6.2 拉格朗日插值法的 Python 实现
import pandas as pd
from scipy.interpolate import lagrange
import numpy as np# 读取Excel文件
df = pd.read_excel('data.xlsx')# 假设你的数据在以下列中
x_column = 'X'  # X轴的列名
y_column = 'Y'  # Y轴的列名# 提取非缺失值的部分进行插值
x = df[x_column].dropna().values
y = df[y_column].dropna().values# 创建拉格朗日插值多项式
poly = lagrange(x, y)# 查找缺失值所在的行并填充
missing_rows = df[df[y_column].isna()].index
for i in missing_rows:x_missing = df.at[i, x_column]y_missing = poly(x_missing)df.at[i, y_column] = y_missing# 打印填充后的DataFrame
print(df)# 保存填充后的数据到Excel文件
df.to_excel('filled_data.xlsx', index=False)

7. 牛顿插值法填充缺失值

牛顿插值法使用差商表构建插值多项式,适合逐步添加数据点的情况。

7.1 牛顿插值法的基本概念

牛顿插值通过构造差商表并逐步构建多项式进行插值。

7.2 牛顿插值法的 Python 实现
import pandas as pd
import numpy as np# 读取Excel文件
df = pd.read_excel('data.xlsx')# 假设你的数据在以下列中
x_column = 'X'  # X轴的列名
y_column = 'Y'  # Y轴的列名# 提取非缺失值部分进行插值
x = df[x_column].dropna().values
y = df[y_column].dropna().values# 计算差商表
def divided_diff(x, y):n = len(y)coef = np.zeros([n, n])coef[:, 0] = yfor j in range(1, n):for i in range(n - j):coef[i][j] = (coef[i + 1][j - 1] - coef[i][j - 1]) / (x[i + j] - x[i])return coef[0, :]  # 返回差商表的第一行# 计算牛顿插值多项式
def newton_poly(coef, x_data, x):n = len(coef) - 1p = coef[n]for k in range(1, n + 1):p = coef[n - k] + (x - x_data[n - k]) * preturn p# 计算差商表的系数
coef = divided_diff(x, y)# 查找缺失值所在的行并填充
missing_rows = df[df[y_column].isna()].index
for i in missing_rows:x_missing = df.at[i, x_column]y_missing = newton_poly(coef, x, x_missing)df.at[i, y_column] = y_missing# 打印填充后的DataFrame
print(df)# 保存填充后的数据到Excel文件
df.to_excel('filled_data_newton.xlsx', index=False)

8. 检查和处理重复值

处理缺失值后,检查并处理数据中的重复值同样重要。

8.1 检查重复值

使用 duplicated() 方法检查重复行。

print(df.duplicated())
8.2 删除重复值

使用 drop_duplicates() 方法删除重复行。

df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)

9. 高级操作:条件填充和分组处理
9.1 根据条件填充缺失值

有时需要根据其他列的条件填充缺失值。

df['C'] = df['C'].fillna(df['A'] + df['B'])
9.2 分组填充

可以对数据进行分组,然后对每个组分别填充缺失值。

df['C'] = df.groupby('A')['C'].transform(lambda x: x.fillna(x.mean()))

相关文章:

数学建模_缺失值处理_拉格朗日、牛顿插值(全)

- 缺失值处理 1. 识别缺失值 在处理缺失值之前,首先需要识别数据中的缺失值。 1.1 使用 isna() 和 isnull() Pandas 提供了 isna() 和 isnull() 方法来检测缺失值,二者功能相同。 import pandas as pddf pd.DataFrame({A: [1, 2, None, 4],B: [None, 2,…...

算法题之水壶问题

水壶问题 有两个水壶,容量分别为 x 和 y 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 target 升。 你可以: 装满任意一个水壶清空任意一个水壶将水从一个水壶倒入另一个水壶,直到接水壶已满,或倒水壶已空。 示…...

Java项目: 基于SpringBoot+mysql蜗牛兼职网兼职平台管理系统(含源码+数据库+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql蜗牛兼职网兼职平台管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操…...

C#数组中的Rank,GetUpperBound(), GetLength()

Rank-数组的秩,一维数组的Rank1;二维数组的Rank2; GetUpperBound()--获取每一维的索引的上限, 比如int[4,5], 那么GetUpperBound(0) 3; GetUpperBound(1) 4 ; 所以 对于二维数组来说 GetUpperBound(0)1行数; G…...

Android应用开发项目式教程——序

文章目录 Android技术本书特点本书内容本书参考 Android技术 Android是重要的客户端技术,因其开源开放的特点,Android在其初期就迅速成长为智能手机的主流操作系统,近年来更进一步成为智能电视、智能车载终端等智能设备的主流操作系统&#…...

【Spring Boot 3】【Web】统一处理 HTTP 请求体

【Spring Boot 3】【Web】统一处理 HTTP 请求体 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总…...

uni-app开发微信小程序

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它允许开发者编写一次代码,然后发布到iOS、Android、Web(包括各种小程序平台如微信小程序、支付宝小程序、百度智能小程序等)以及各种快应用平台上。对于使用uni-app开发微信小…...

Qt开发框架--完整的软件开发框架

Qt开发框架包含一整套高度直观、模块化 的C 库类,并加载可简化应用程序开发的API。Qt 可生成高可读、易维护和可重用的代码,具有较高的运行时性能,且内存占用小。最重要的是,Qt是跨平台的。 Qt工具分为这么几个类别: …...

Python爬虫-Amazon亚马逊oData参数

前言 本文是该专栏的第37篇,后面会持续分享python爬虫干货知识,记得关注。 本文以“亚马逊Amazon”为例,主要获取亚马逊商品详情页的oData参数规律。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整…...

Q215 数组中第K大的元素

思路 可以用排序,但是不用全有序 还有个要求是O(n) 快排改版 快排只排需要的部分 public int findKthLargest(int[] nums, int k) {return quickSort(nums, 0, nums.length-1, nums.length-k);}public static int quickSort(int[] nums, …...

Java8特性:分组、提取字段、去重、过滤、差集、交集

总结下自己使用过的特性 将对象集合根据某个字段分组 //根据id分组 Map<String, List<Bean>> newMap successCf.stream().collect(Collectors.groupingBy(b -> b.getId().trim()));获取对象集合里面的某个字段的集合 List<Bean> list new ArrayList&l…...

Maven快速上手使用指南的笔记

Maven Mini Guides Configuring for Reproducible Builds 使用Maven实现重复构建。 检查当前使用的插件的版本。 mvn artifact:check-buildplan修改pom.xml&#xff0c;增加如下配置&#xff0c;显式指定project.build.outputTimestamp的取值&#xff1a; <properties>…...

MySQL面试题大全和详解,含SQL例子

若有不理解&#xff0c;可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是一些常见的 MySQL 面试题及其解答&#xff0c;包含 SQL 示例。 1. 什么是 MySQL&#xff1f; 答&…...

java-redis-雪崩

Redis 雪崩问题 Redis雪崩 是指在 Redis 缓存系统中&#xff0c;当大量缓存同时失效时&#xff0c;所有请求直接打到数据库&#xff0c;导致数据库瞬间压力激增&#xff0c;甚至崩溃的现象。雪崩问题通常出现在高并发的系统中&#xff0c;因为缓存的失效导致后端数据库承受不了…...

如何在mac上玩使命召唤手游?苹果电脑好玩的第一人称射击游戏推荐

《使命召唤4&#xff1a;现代战争》&#xff08;Call of Duty 4: Modern Warfare&#xff09;是由Infinity Ward开发并于2007年发行的第一人称射击游戏。该游戏是《使命召唤》系列的第四部作品&#xff0c;是一款非常受欢迎的游戏之一&#xff0c;《使命召唤4&#xff1a;现代战…...

SimHash算法详解与应用

1. 简介 在当今信息爆炸的时代&#xff0c;如何有效地管理和处理海量的文本数据&#xff0c;尤其是去除重复内容&#xff0c;是一项重要的任务。SimHash 是一种巧妙的哈希算法&#xff0c;它不仅能快速生成文本的哈希值&#xff0c;还能在不同文本之间生成相似的哈希值&#x…...

RasberryPi 3B树莓派基本配置

RaspberryPi 3B树莓派基本配置 文章目录 RaspberryPi 3B树莓派基本配置一、准备工作1.1 硬件准备&#xff1a;1.1.1 树莓派和电源适配器&#xff1a;1.1.2 USB转TTL模块&#xff1a;1.1.3 读卡器和TF卡&#xff1a; 1.2 软件准备&#xff1a;1.2.1 下载 Raspberry Pi OS&#x…...

Docker编译环境的使用(ubuntu)

目录 Ubuntu安装docker 重启docker 拉取镜像 进入docker安装软件 提交docker 添加用户到docker组 进入docker 添加build用户 停止容器 保存docker镜像 load镜像 删除容器 Ubuntu安装docker sudo apt install docker.io 国内可用的源 Welcome to nginx! (tence…...

认知杂谈53

今天分享 有人说的一段争议性的话 I I 1.自助者天助 首先呢&#xff0c;咱得好好琢磨琢磨“自助者天助”这句话。这话说起来好像有点高深莫测的感觉&#xff0c;其实啊&#xff0c;道理特别简单。 就是说要是你自己都不乐意努力&#xff0c;那老天爷也不会平白无故地来帮你…...

量子计算信息安全威胁与应对策略分析

作者简介 赖俊森 中国信息通信研究院技术与标准研究所光网络技术与应用研究部主任工程师&#xff0c;正高级工程师&#xff0c;主要研究方向为量子信息、量子通信、量子计算等。 赵文玉 中国信息通信研究院技术与标准研究所副所长&#xff0c;正高级工程师&#xff0c;主要…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...