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

- 缺失值处理

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()))

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

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

相关文章

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务(安装后服务默认自启动) 三、安…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…

传输层协议UDP

本篇将主要介绍 UDP 协议&#xff0c;介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项&#xff0c;以及有关 UDP 的 Socket 编程程序&#xff0c;同时重点介绍了操作系统对于 UDP 协议报文的管理。 接着介绍了有关端口号的映射。 …

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信&#xff0c;引…

【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形

给你一个 m x n 的二进制矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有…

Python爬虫所需的技术及其原理(简单易懂)

导言 随着互联网的发展&#xff0c;大量的数据被存储在网络上&#xff0c;而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言&#xff0c;被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理&#xff0c;并提供相关的代码案例。…

Spark数据介绍

从趋势上看&#xff0c;DataFrame 和 Dataset 更加流行。 示例场景 数据仓库和 BI 工具集成&#xff1a; 如果你需要处理存储在数据仓库中的结构化数据&#xff0c;并且希望与 BI 工具集成&#xff0c;那么 DataFrame 和 Dataset 是首选。 机器学习流水线&#xff1a; 在构建机…

ICLR2024: 大视觉语言模型中对象幻觉的分析和缓解

https://arxiv.org/pdf/2310.00754 https://github.com/YiyangZhou/LURE 背景 对象幻觉&#xff1a;生成包含图像中实际不存在的对象的描述 早期的工作试图通过跨不同模式执行细粒度对齐&#xff08;Biten et al.&#xff0c;2022&#xff09;或通过数据增强减少对象共现模…

xxl-job升级到springboot3.0 导致页面打不开报错)问题

原因&#xff1a;springboot3.0 因为移除了jsp 导致xxl-job不能访问&#xff0c;解决方法如下 1、修改PermissionInterceptor拦截器 package com.xxl.job.admin.controller.interceptor;import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月&#xff0c;2024 天池云原生编程挑战赛决赛名单公布&#xff01; 本届大赛规模创新高&#xff0c;参赛战队达 20000 支&#xff0c; 广覆盖国内外优秀高校和杰出企业&#xff01;吸引了来自北京大学、清华大学等 176 所国内外优秀高校&#xff0c;以及美团、米哈游…

2025年25届必看:如何用Java SpringBoot+Vue搭建大学生成绩量化管理系统?

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

青岛实训 8月21号 day33

1.设置主从从mysql57服务器 1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.g…

怎么摆脱非自然链接?

什么是非自然链接&#xff1f; 非自然链接是人为创建的链接&#xff0c;用于操纵网站在搜索引擎中的排名。非自然链接违反了Google 的准则&#xff0c;网站可能会因此受到惩罚。 它们不是由网站所有者编辑放置或担保的。示例包括带有过度优化锚文本的链接、通过 PR 的广告、嵌…

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…

jQuery入门(七)jQuery实现按钮分页

一、分页案例分析 功能分析&#xff1a;使用分页插件&#xff0c;实现分页&#xff0c;效果如下图&#xff1a; 二、实现思路和代码 2.1&#xff09;页面实现分析 1.引入分页插件的样式文件和 js 文件。 2. 定义当前页码和每页显示的条数。(分页必备信息) 3. 调用查询数据…

Express与SQLite集成教程:轻松实现数据库操作

Express使用SQLite的教程可以大致分为以下几个步骤。以下是一个详细的指南&#xff0c;帮助你在Express项目中集成SQLite数据库。 1. 安装必要的库 首先&#xff0c;你需要在你的Express项目中安装sqlite3库。打开终端或命令提示符&#xff0c;切换到你的项目目录&#xff0c…

挂轨巡检机器人在发电厂与煤矿皮带机场景的应用

一、引言 在发电厂和煤矿等重工业领域&#xff0c;皮带机作为关键设备&#xff0c;其运行状态直接关系到生产效率和安全。然而&#xff0c;传统的人工巡检方式不仅效率低下&#xff0c;还存在安全隐患。随着智能巡检技术的不断发展&#xff0c;杭州旗晟智能科技有限公司推出的…

使用mobaxterm连接linux出现连接中断问题

1.问题描述 使用mobaxterm在连接到远程服务器时&#xff0c;如果隔一段时间不进行操作的话&#xff0c;会出现中断连接的现象。 2.解决 为了增强Linux系统的安全性&#xff0c;我们需要在用户输入空闲一段时间后自动断开&#xff0c;这个操作可以由设置TMOUT值来实现。将以下…

HTB-Pennyworth(cve查询 和 exp使用)

前言 各位师傅大家好&#xff0c;我是qmx_07,今天给大家讲解Pennyworth靶场 渗透过程 信息搜集 服务器端口开放了8080http端口 访问网站 服务器使用jenkins cms系统&#xff0c;版本是2.289.1 通过弱口令爆破&#xff0c;账户是root,密码是password 通过命令执行nday 连…