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

 更新时间:2023年06月21日 14:21:49   投稿:jingxian  
这篇文章主要介绍了pandas解决数据缺失、重复的方法与实践过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 新手Python环境配置指南及pip安装教程

    新手Python环境配置指南及pip安装教程

    这篇文章主要给大家介绍了新手Python环境配置指南及pip安装教程的相关资料,pip是一款非常方便的python包管理工具,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Python编程中被忽视的核心技巧总结

    Python编程中被忽视的核心技巧总结

    这篇文章主要介绍了一些在 Python 编程中可能被忽视的核心功能,包括默认参数、海象运算符、*args 和 **kwargs 的使用等,需要的可参考下
    2023-08-08
  • Python中isnumeric()方法的使用简介

    Python中isnumeric()方法的使用简介

    这篇文章主要介绍了Python中isnumeric()方法的使用,isnumeric()方法的使用是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • django模板语法学习之include示例详解

    django模板语法学习之include示例详解

    写过 Web 程序的都对 include 包含文件很熟悉,那么在 Django,include 又是怎么一个机制呢?下面这篇文章主要给大家介绍了关于django模板语法学习之include的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • Python tkinter三种布局实例详解

    Python tkinter三种布局实例详解

    这篇文章主要介绍了Python tkinter三种布局实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • pytorch中tensor转换为float的实现示例

    pytorch中tensor转换为float的实现示例

    本文主要介绍了pytorch中tensor转换为float,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • 基于Python编写将文本转换为语音的简易应用

    基于Python编写将文本转换为语音的简易应用

    这篇文章主要介绍了如何使用Python编写一个简单的应用程序,将文本转换为语音,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2023-08-08
  • Python根据当前日期取去年同星期日期

    Python根据当前日期取去年同星期日期

    最近做项目,遇到这样的业务开发需求,需要对比当前时间段和去年同星期的时间段的数据,下面小编通过实例代码给大家分享Python根据当前日期取去年同星期日期,需要的朋友参考下
    2019-04-04
  • python库pydantic数据验证和设置管理库的用途

    python库pydantic数据验证和设置管理库的用途

    pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍python库pydantic数据验证和设置管理库的用途,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • python实现逻辑回归的方法示例

    python实现逻辑回归的方法示例

    这篇文章主要介绍了python实现逻辑回归的方法示例,这是机器学习课程的一个实验,整理出来共享给大家,需要的朋友可以参考学习,下来要一起看看吧。
    2017-05-05

最新评论