pandas解决数据缺失、重复的方法与实践

news2024/12/26 11:09:17

在这里插入图片描述

1. 数据缺失

常见的数据缺失是指一条数据记录中,某个数据项没有值,延申到实际应用中,还有一种时间序列的缺失,例如按整点采集数据,缺少某一时刻的数据(缺少一整行数据)。

解决方法,如果不删除数据,一般进行插值处理,常见的补0,或者某个经验值,更科学的方法是线性插值,或者更复杂的算法。

1.1. 时间序列补充

例如,给定某个时间序列(逐时),中间缺少3点数据,插值补充,并扩充数据到间隔半个小时。

代码 1.

import pandas as pd

key = ['getTime','temp','text','humidity']
data = [['2023-04-30T00:00',7,'晴',57],
        ['2023-04-30T01:00',6,'晴',58],
        ['2023-04-30T02:00',6,'阴',55],
        ['2023-04-30T04:00',4,'晴',50]]
df = pd.DataFrame(data,columns=key)
df.index = df['getTime'].astype('datetime64')

在这里插入图片描述
补充时间序列,同时对数值列进行线性插值。

代码 2.

df1 = df.resample('30min').interpolate(method='linear') 

在这里插入图片描述

注意:补充时间序列,需要DataFrame中的index是时间序列。

或者,新建时间序列表,再通过pd.merge关联补足缺失时序。

代码 3.

times = pd.date_range('2023-04-30 00:00', '2023-04-30 04:59', freq='1h') # 与上文采用标准国际时间 UTC
# times = pd.date_range('2023-04-30 00:00', '2023-04-30 04:59', freq='1h', tz='Asia/Shanghai')
df0 = pd.DataFrame(index=times)
df0 = pd.merge(left=df0,right=df,left_index=True,right_index=True,how='left')

在这里插入图片描述

1.2. 数据项缺失

1.2.1. 线性插值

代码 4.

df0[['temp','humidity']] = df0[['temp','humidity']].interpolate(method='linear')  

在这里插入图片描述
或者,直接在时间序列补充时,线性插值,详见代码 2

1.2.2. 复制上一条数据

如果是非数值型数据,可以采用复制上一条数据内容,同理,数值型也满足。

代码 5.

df0[['text','getTime']] = df0[['text','getTime']].fillna(method='ffill') 

在这里插入图片描述

1.2.3. 空值填充

例如,针对代码 3的结果进行填充空值“6”。

代码 6.

df0.fillna(6, inplace=True) 

在这里插入图片描述

2. 删除重复数据行

首先,构建重复数据,合并同一张表。

代码 7.

# 合并同表前两条记录
df2 = pd.concat([df,df.head(2)])

其中,head(2)是取表中前两条记录。
在这里插入图片描述

2.1. 删除完全重复的行

删除重复记录。

代码 8.

df2 = df2.drop_duplicates()

在这里插入图片描述

注意:这个是删除完全相同的数据。

2.2. 删除重复数据项

按某列(可以多个)进行去重,对于重复项,保留第一次出现的值。

代码 9.

df2 = df2.drop_duplicates('text',keep='first')

df.drop_duplicates(subset=[‘A’,‘B’,‘C’],keep=‘first’,inplace=True)
参数说明如下:

  • subset:表示要进去重的列名,默认为 None。
  • keep:有三个可选参数,分别是 first、last、False,默认为 first,表示只保留第一次出现的重复项,删除其余重复项,last 表示只保留最后一次出现的重复项,False 则表示删除所有重复项。
  • inplace:布尔值参数,默认为 False 表示删除重复项后返回一个副本,若为 Ture 则表示直接在原数据上删除重复项。

3. 按条件修改数据

按条件修改部分数据值,常用方法是apply()调用函数处理,也可以直接使用loc定位索引进行修改数据,引用代码 1产生的结果。

本文采用loc方式,按条件修改数据。

代码 10.

df.loc[df.loc[(df.index>=pd.to_datetime('2023-04-30 01:00')) ].index,
        ['temp','humidity']] = df[['temp','humidity']].loc[(df.index>=pd.to_datetime('2023-04-30 01:00')) ]+10

在这里插入图片描述

按索引,具体列为查询条件都可以。

4. 发现空值及处理

4.1. 空值查询

查询出空值,并替换同行数据中的另一项数据,例如:查询代码 2的结果集,查询“text”为空时的“temp”值,由“humidity”的值替换。

代码 11.

df1.loc[df1[df1['text'].isnull()].index,'temp'] = df1['humidity'].loc[df1['text'].isnull()]

在这里插入图片描述
依据查询代码 2的结果集,查询非空数据。

代码 12.

df1 = df1.loc[~df1['text'].isnull()]

在这里插入图片描述

其中,~ 表示取反符号,.isnull() 方法用于判断是否为空。

4.2. 删除空值

依据查询代码 2的结果集,删除空值的数据行。

代码 13.

df1 = df1.dropna()

在这里插入图片描述

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

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

相关文章

Type-C PD显示器方案简介

方案概述 LDR6020 Type-C PD显示器方案可以给显示器提供一个全功能C口,支持手机,电脑,游戏主机等一线投屏功能,同时支持PD快充输出。LDR6020内置了 USB Power Delivery 控制器和 PD BMC PHY 收发器,支持PD2.0/3.0等快…

leetcode:1848. 到目标元素的最小距离(python3解法)

难度:简单 给你一个整数数组 nums (下标 从 0 开始 计数)以及两个整数 target 和 start ,请你找出一个下标 i ,满足 nums[i] target 且 abs(i - start) 最小化 。注意:abs(x) 表示 x 的绝对值。 返回 abs(…

Jenkins之节点的使用

节点概念 Jenkins服务运行在一台服务器上,服务器的资源是有限的,Jenkins服务的构建速度受服务器资源影响,也是有限的。当我们需要构建的项目比较多或规模比较大的时候,可能会超出Jenkins的构建能力,超出其构建能力&am…

el-table合计行单元格合并、单元格样式修改

1、目标效果 源码放在下面,复制粘贴即可 (1)合计行放在头部,且字体颜色变粗、合计行背景色变粗 (2)合计行年龄算平均值且字体颜色为绿色,财产算总数且字体颜色为红色 2、原理 2.1、el-table中s…

clickhosue:8123和9000

8123和9000是ClickHouse数据库的两个不同的端口,它们具有不同的功能和使用方式。 8123端口(HTTP端口): 用于通过HTTP协议与ClickHouse数据库进行交互。 支持RESTful API和HTTP查询语法。 可以使用浏览器、curl等工具发送HTTP请…

【备战秋招】每日一题:4月8日美团春招第四题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第四题-田地行走 在线评测链接:P1169 题目描述 塔子哥是一个农民,他有一片 大小的田地,共 n 行 m 列,其中行和列都用从 1 开始的整数…

lua中chunk的理解

在Lua中,一个chunk是一段可执行的Lua代码。通常,一个chunk由一系列语句和表达式组成,可以是一个完整的程序文件,也可以是一个交互式控制台中输入的一行代码。 例如,下面是一个简单的Lua chunk: print(&qu…

阿里巴巴最新30万字1008道Java经典面试题总结(附答案)限时开源

前言 在备战面试的时候,大家总会通过刷题的方式来准备,然而刷题是有用没错,有时候还得看看押题能不能压中重点,大厂喜欢问些什么技术点,不然当那个笑眯眯的面试官问出那些你再熟悉不过的问题 Java 问题时,…

vue2.x项目引入CKEditor4的两种方式

百度用了不行的看过来&#xff0c;本文专治各种流程不通的 一.直接npm下载型 下载ckeditor到vue项目 npm install ckeditor4-vue2.在main.js里导入 import Vue from vue; import CKEditor from ckeditor4-vue;Vue.use( CKEditor );3.在需要使用的组件里这样使用 <templ…

day54_spring整合mybatis

SpringMybatis整合【重点】 Spring学完了,主要学习Spring两个内容:IOCAOP 利用这两个知识来完成spring和mybatis的整合 IOC: 控制反转,用来创建对象 XxxService通过数据源创建数据库连接创建SqlSessionFactory创建SqlSession获得XxxMapper代理对象 AOP: 面向切面 控制事务 具体…

基于spring的前后端一体化积分商城系统

系统介绍 积分商城系统是一个基于Spring、MySQL和Redis等技术栈构建的全功能商城解决方案。该系统旨在为用户提供一个便捷的购物体验&#xff0c;并以积分作为支付和奖励的核心机制。 系统的核心功能包括商品浏览、购买下单、积分管理和订单处理。用户可以通过客户端访问系统…

一业余无线电爱好者因违规被罚2.4万美元,是否合理?

据一份名为《关于处罚款项的通知》&#xff0c;美国联邦通信委员会经过调查&#xff0c;对加利福尼亚州的一名业余无线电持有人菲利普J博代特&#xff08;业余电台呼号&#xff1a;N6PJB&#xff09;&#xff0c;处以巨额罚款&#xff0c;罚款金额为2.4万美元&#xff0c;折合人…

颠覆2D对象检测模型,MediaPipe 3D对象检测还原真实的对象特征

关于对象检测,我们以前分享的文章都是介绍的2D的对象检测,但是我们很多使用场景下,希望检测到的对象能够以3D的影像呈现出来,本期介绍的MediaPipe Objectron便是是用于日常对象的移动实时3D对象检测解决方案。它检测2D图像中的对象,并通过在Objectron数据集上训练的机器学…

6.17黄金反弹是否到顶,下周开盘如何布局

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;黄金周五(6月16日)小幅收高&#xff0c;但在触及5月以来最低盘中水准后本周以下跌收官。美市尾盘&#xff0c;现货黄金收报1957.68美元/盎司&#xff0c;下跌0.19美…

干货|来自新加坡管理大学、KAUST的大模型最新进展:推荐系统、未来AI社会研究……...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ChatGPT的横空出世刷新了我们对这个世界的认知和想象&#xff0c;而大型语言模型也逐渐成为学术界的研究热点。在自然语言处理、智能推荐、知识获取、智能对话等领域&#xff0c;大模型发挥着越来越重要的作用。…

自然语言处理从入门到应用——词向量的评价方法

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 对于不同的学习方法得到的词向量&#xff0c;通常可以根据其对词义相关性或者类比推理性的表达能力进行评价&#xff0c;这种方式属于内部任务评价方法&#xff08;Intrinsic Evaluation&#xff09;。在实际任务中&am…

Linux学习[15]bash学习深入1---bash的功能---变量详解

文章目录 前言&#xff1a;1. bash功能2. 变量2.1 变量赋值2.2 unset取消变量2.3 环境变量 总结 前言&#xff1a; 之前在学树莓派相关内容的时候&#xff0c;对bash脚本的简单上手做了一个总结&#xff0c;并且归纳到下面三个博客。 当时参考的书为《从树莓派开始玩转linux》…

Gitlab CI/CD入门(一)Python项目的CI演示

本文将介绍CI/CD的基本概念&#xff0c;以及如何使用Gitlab来实现CI/CD。   本文介绍的CI/CD项目为个人Gitlab项目&#xff1a;gitlab_ci_test&#xff0c;访问网址为&#xff1a;https://gitlab.com/jclian91/gitlab_ci_test。 CI/CD的含义 在现代软件工程中&#xff0c;CI…

【主跑例子】 Framework01、02;QFramework00(我跟着视频的旧版本,但推荐用最新的)、01(无)、02(无)、03(无)

总体介绍 做的是 00,10,13&#xff0c;考虑做10。 11,12没下载&#xff0c;当时把这两个误认为 00,10 用到了UniRx Framework有2个 00 Unity 游戏框架搭建 2019 第一季 C# 核心知识与简易 Manager Of Managers 框架搭建 120课数 01 Unity 游戏框架搭建 2019 第二季 模块/系统…

前端Vue仿滴滴打车百度地图定位查找附近出租车或门店信息(更新版)

前端vue仿滴滴打车百度地图定位查找附近出租车或门店信息, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id12982 效果图如下: # #### 使用方法 使用方法 <!-- 官方文档&#xff1a; https://dafrok.github.io/vue-baidu-map/#/zh/start/b…