【Pandas 入门-4】时间序列数据处理与数据清洗

2023-11-05

时间序列数据处理

to_datetimedt.strftime

实际工作中,经常会遇到大量的时间序列数据。这些时间序列的原始数据一般为文本格式,我们需要将它转化为时间日期格式。 Pandas 提供了 to_datetime函数将其他日期时间格式转化为 Python 的日期时间格式。例如:

import pandas as pd

pd.to_datetime('20200514')
Timestamp('2020-05-14 00:00:00')
pd.to_datetime('2020/05/14')
Timestamp('2020-05-14 00:00:00')
pd.to_datetime('2020-05-14')
Timestamp('2020-05-14 00:00:00')

在上面的代码中可以看出,to_datetime方法将不同类型的时间数据字符串转化为 Timestamp 格式:年-月-日 时:分:秒。另外一个函数dt.strftime可以将 Pandas 的 Timestamp 格式数据转化为其他格式的字符串,例如:

df = pd.DataFrame({'入校时间': ['2016-09-15', '2017-03-23', '2018-09-05'], '统计学': [85, 68, 90], '高数': [82, 63, 88], '英语': [84, 90, 78], '姓名': ['张三', '李四', '王五']})
df
入校时间 统计学 高数 英语 姓名
0 2016-09-15 85 82 84 张三
1 2017-03-23 68 63 90 李四
2 2018-09-05 90 88 78 王五
df.iloc[0, 0]  # 原始数据中的时间为字符串
'2016-09-15'
df['入校时间'] = pd.to_datetime(df['入校时间']) # 将原始数据中的时间转化为 python 的日期格式
df
入校时间 统计学 高数 英语 姓名
0 2016-09-15 85 82 84 张三
1 2017-03-23 68 63 90 李四
2 2018-09-05 90 88 78 王五
df.iloc[0, 0]
Timestamp('2016-09-15 00:00:00')
 df['入校时间'].dt.strftime('%m-%d-%y')  # 将日期格式转化为自定义格式的字符串
0    09-15-16
1    03-23-17
2    09-05-18
Name: 入校时间, dtype: object
df['入校时间'].dt.strftime('%B-%d-%y')  # 将日期格式转化为自定义格式的字符串,小写 Y 年份显示两位
0    September-15-16
1        March-23-17
2    September-05-18
Name: 入校时间, dtype: object
df['入校时间'].dt.strftime('%B-%d-%Y')  # 将日期格式转化为自定义格式的字符串,大写 Y 则年份显示四位
0    September-15-2016
1        March-23-2017
2    September-05-2018
Name: 入校时间, dtype: object
df['入校时间'].dt.strftime('%Y-%W')  # 将日期格式转化为自定义格式的字符串,大写 W 显示的为该年第几周
0    2016-37
1    2017-12
2    2018-36
Name: 入校时间, dtype: object
df['入校时间'].dt.strftime('%Y-%m-%w')  # 将日期格式转化为自定义格式的字符串,小写 w 显示的为该月第几周
0    2016-09-4
1    2017-03-4
2    2018-09-3
Name: 入校时间, dtype: object

数据聚合函数resample

对于很多时间序列数据,有时候经常需要对它们按一定周期进行数据聚合,可以用 Pandas 提供的resample函数。resample 方法中的小括号中用不同参数表示聚合的频率。举例:

import numpy as np

index = pd.date_range('12/24/2019', periods = 10, freq ='D')  # 生成一个时间序列,频率为天,周期数为 10
index
DatetimeIndex(['2019-12-24', '2019-12-25', '2019-12-26', '2019-12-27',
               '2019-12-28', '2019-12-29', '2019-12-30', '2019-12-31',
               '2020-01-01', '2020-01-02'],
              dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(np.arange(10),index = index)  # 创建一个包含时间序列的 DataFrame 数据表
df
0
2019-12-24 0
2019-12-25 1
2019-12-26 2
2019-12-27 3
2019-12-28 4
2019-12-29 5
2019-12-30 6
2019-12-31 7
2020-01-01 8
2020-01-02 9
df.resample('M').sum()  # 用 resample 方法按月('M')对数据聚合
0
2019-12-31 28
2020-01-31 17
df.resample('3D').sum()  # 用 resample 方法每 3 天('3D')对数据聚合
0
2019-12-24 3
2019-12-27 12
2019-12-30 21
2020-01-02 9
df.resample('w').sum()  # 用 resample 方法每周('w')对数据聚合
0
2019-12-29 15
2020-01-05 30

resample的其他参数中, ‘T’ 表示分钟,‘H’ 表示小时,除了跟sum()方法外,还可以跟asfreq()ffillapply()等。

数据清洗

数据替换replace, fillna

在进行数据处理时,经常需要对原始数据的一些异常值或错误值进行批量处理。 Pandas 提供了replace函数方便地进行这项操作。replace函数第一项为原数据中的值,第二项为需要替换的值。例如,有下面的学生成绩:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[85, 68, 90], [82, 63, 88], [84, 90, 78]]), columns=['统计学', '高数', '英语'], index=['张三', '李四', '王五'])
df
统计学 高数 英语
张三 85 68 90
李四 82 63 88
王五 84 90 78

将其中的分数 90 替换为缺失值 NaN,注意,replace返回了一个新的数据,但原始数据并没有改变。

df.replace(90, np.nan) 
统计学 高数 英语
张三 85 68 85
李四 82 63 88
王五 84 85 78
df # 原始数据并没有变
统计学 高数 英语
张三 85 68 90
李四 82 63 88
王五 84 90 78

若需要原始数据改变,需要跟上参数inplace = True ,下面讲到的函数fillna drop_duplicatesdropnarename等也可以跟这个参数将原始数据改变。

df.replace(90, np.nan, inplace = True)
df # 原始数据改变了
统计学 高数 英语
张三 85 68.0 NaN
李四 82 63.0 88.0
王五 84 NaN 78.0

Pandas 提供fillna函数批量替换数据表中的缺失值 NaN。例如:

df.fillna(80)  # 将缺失值替换为 80
统计学 高数 英语
张三 85 68.0 80.0
李四 82 63.0 88.0
王五 84 80.0 78.0
df.fillna('missing')  # 将缺失值替换为一个字符串
统计学 高数 英语
张三 85 68.0 missing
李四 82 63.0 88.0
王五 84 missing 78.0

Pandas 还可以直接调用isnull函数判断数据是否为缺失值:

df['英语'].isnull()
张三     True
李四    False
王五    False
Name: 英语, dtype: bool

重复值处理drop_duplicates

在数据量比较大时,经常会遇到重复数据的问题,可以使用函数drop_duplicates将重复数据去掉。例如:

df = pd.DataFrame([['一班', '男', 85, 68, 90], ['一班', '男', 85, 68, 90], ['二班', '女',84, 90, 78], ['三班', '女',75, 68, 80],\
                   ['二班', '女',69, 55, 63], ['一班', '男', 89, 95, 93]], columns=['班级','性别','统计学','高数','英语'],\
                  index=['张三', '张三', '王五', '马六', '陈小虎', '魏大帅'])
df
班级 性别 统计学 高数 英语
张三 一班 85 68 90
张三 一班 85 68 90
王五 二班 84 90 78
马六 三班 75 68 80
陈小虎 二班 69 55 63
魏大帅 一班 89 95 93

前两行的数据完全相同,使用函数drop_duplicates处理:

df.drop_duplicates()
班级 性别 统计学 高数 英语
张三 一班 85 68 90
王五 二班 84 90 78
马六 三班 75 68 80
陈小虎 二班 69 55 63
魏大帅 一班 89 95 93

缺失值处理drop_na

dropna函数可以将数据表中包含缺失值的行去除掉,与drop_duplicates相比,该方法的可调节参数更多些。它的语法如下:

DataFrame.dropna(axis=0, how='any', thresh=None, inplace=False)}
axis axis=0 表示删除含空值所在行,axis=1 表示删除含空值所在列
how 默认为 how='any',表示若有空值,就删除
how='all',表示全部是空值才删除该行或该列
thresh 空值的个数,作为行或列的删除标准
inplace 若 inplace=True,表示处理后的数据替换原数据
df = pd.DataFrame({'统计学': [85, 68, np.nan], '高数': [82, 75, 88], '英语': [np.nan, 90, 78]}, index=['张三', '李四', '王五'])
df
统计学 高数 英语
张三 85.0 82 NaN
李四 68.0 75 90.0
王五 NaN 88 78.0
df.dropna()  # 默认为删除含有空值的行,并且只要行里面有 Nan 值,就删除
统计学 高数 英语
李四 68.0 75 90.0
 df.dropna(axis = 1) # 删除含有空值的列
高数
张三 82
李四 75
王五 88
 df.dropna(how = 'all') # 全部是空值才删除
统计学 高数 英语
张三 85.0 82 NaN
李四 68.0 75 90.0
王五 NaN 88 78.0

重命名rename

在处理数据表时,有时候要给数据的行名或列名重命名,此时要用到rename函数,rename函数中的参数为一个字典形式:替换前的名字为字典的 key,替换后的名字为字典的 value。

df = pd.DataFrame({'统计学': [85, 68, 90], '高数': [82, 63, 88], '英语': [84, 90, 78]})
df
统计学 高数 英语
0 85 82 84
1 68 63 90
2 90 88 78
df.rename(columns = {'统计学': '科目A', '高数': '科目B'})  # 更改其中两列的列名
科目A 科目B 英语
0 85 82 84
1 68 63 90
2 90 88 78
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Pandas 入门-4】时间序列数据处理与数据清洗 的相关文章

随机推荐

  • gcc -Wall详解

    当GCC在编译过程中检查出错误的话 它就会中止编译 但检测到警告时却能继续编译生成可执行程序 因为警告只是针对程序结构的诊断信息 它不能说明程序一定有错误 而是存在风险 或者可能存在错误 虽然GCC提供了非常丰富的警告 但前提是你已经启用了
  • j2ee_XML建模

    1 什么叫XML建模 将XML配置文件中的元素 属性 文本信息转换成对象的过程叫做XML建模 XML建模 1 根据XML配置文件元素节点创建元素节点实体类 ConfigModel ActionModel ForwardModel 2 利用d
  • ifconfig、ip addr、ip route用法总结

    最近使用haproxy keepalived 负载均衡 发现虚拟IP有问题 配置文件里配的VIP是 4 143 但是执行 ip a 发现还有一个虚拟IP 4 134 应该是以前配置文件keepalived conf里设置过VIP 4 134
  • 做大模型时代的应用层创业!

    Datawhale创业 方向 大模型 合作伙伴 Datawhale 亲爱的科技探险家们和代码魔法师们 未来的钟声已经敲响 预示着一场极度炫酷的虚拟现实游戏即将展开 从初期简单的智能识别 到设计师级别的图纸设计 生成式AI技术 Generat
  • python写路径时候的问题————转载ningqingzy的文章

    作为笔记总结学习 如有侵权 立马删除 总结有三种方法 更换为绝对路径的写法 func1 C Users renyc 显式声明字符串不用转义 加r func1 r C Users renyc 使用Linux的路径 func1 C Users
  • 数仓 - hive ,身份证和手机号 匹配 - 正则方式

    数仓 hive 身份证和手机号 匹配 正则方式 身份证 内容校验 身份证号字段 regexp 1 9 0 9 14 1 9 0 9 16 0 9xX 长度校验 and length trim 身份证号字段 15 or length trim
  • MyBatis特殊SQL的执行(模糊查询、批量删除、动态设置表名、添加功能获取自增的主键)

    一 模糊查询 1 1 like xxx 的方式模糊查询 根据用户名进行模糊查询 param username return java util List
  • activiti 6.x 多实例加签(如有不足留言指出)

    最近刚接触activiti 用的6 x 网上资料太少 断点追流程看属性写了个加签的操作 目前测试的没啥问题 如有问题 请留言指教 上代码 完事之后三个表查查有没有新增数据 有就成了 多实例的才能复制 调用之前最好先判断下 protected
  • 7个程序员常用的接单平台推荐

    推荐7个程序员常用的接单平台 不管做兼职 副业 还是全职自由职业 都可能会用到下面几个网站 特别推荐第一个 飞援 地址链接 前端开发外包 小程序开发兼职 程序员兼职平台 飞援 程序员远程灵活用工平台 聚集了高质量的兼职和全职自由职业开发者
  • sklearn学习笔记

    1 波士顿房价线性回归模型 from sklearn import datasets from sklearn linear model import LinearRegression boston datasets load boston
  • 语法基础——Objective-C语法基础

    前言 学习过Swift之后 好久没用已经生疏了 现在有项目来了 不得不停下手下的工作 开始学习OC 当然这篇文章会以Java基础和C基础作为支撑 这样学习起来入门很简单 可能这篇文章有点个人主义 用作个人笔记吧 OC特点 支持C语法 支持面
  • java中将url下载并转换为MultipartFile文件

    url转换MultipartFile用于图片持久化 需要在对应的网络下才能使用 url转MultipartFile url 图片URL fileName 文件名 return 返回的文件 public static MultipartFil
  • chmod 用法示例

    介绍 Linux中的Chmod命令用于更改或分配文件和目录的权限 在Linux Unix系统中 文件和目录的可访问性是由文件所有权和权限决定的 在上一篇文章中 我们了解了如何使用chown命令管理文件和目录的所有权 在本教程中 我们将介绍c
  • There is no item category assigned to account xxxxxxx

    做GOODS ISSUE的时候遇到这么一个问题 报出一个错误There is no item category assigned to account xxxxxxx 暂时也不知道原因 后来到 Financial Accounting Gl
  • React面试题

    目录 1 什么是虚拟DOM 2 类组件和函数组件之间的区别是什么 3 什么是React 4 说说 Real DOM 和 Virtual DOM 的区别 优缺点 5 在react中如何处理事件 6 class组件和函数组件区别 7 state
  • python之for循环使用(奇数和、偶数和、最大公因数和最小公倍数、用户登陆系统)

    需要知道 有关range gt gt gt range 5 0 1 2 3 4 gt gt gt range 7 0 1 2 3 4 5 6 gt gt gt range 1 7 1 2 3 4 5 6 gt gt gt range 2 7
  • 3DMAX初学者使用软件之前必须设置的参数,你看过了吗?

    刚开始学习3dmax感觉非常的迷茫 软件的安装 软件的基本设置 让刚接触的同学们痛苦不已 那么今天我们来分享一下新手下载完3dmax之后需要进行的基本设置 看好了哦 不要眨眼 你也可以轻松掌握 1 切换语言 单击开始菜单 选择所有程序 找到
  • 机器学习实战之SVD

    1 奇异值分解 SVD singular value decomposition 1 1 SVD评价 优点 简化数据 去除噪声和冗余信息 提高算法的结果 缺点 数据的转换可能难以理解 1 2 SVD应用 1 隐性语义索引 latent se
  • lisp 左手钢筋_LISP命令汇总

    1 本程序用于写钢筋直径 gj 1 测量长度 l m 2 测量多个长度之和 adlm 3 标注一个图元的分段长度 dd 4 标注一个图元的总长度 tj 5 标注多个图元的总长度 td 6 标注多个图元的分段长度和总长度 sd 7 本程序用于
  • 【Pandas 入门-4】时间序列数据处理与数据清洗

    文章目录 时间序列数据处理 to datetime 与 dt strftime 数据聚合函数 resample 数据清洗 数据替换 replace fillna 重复值处理 drop duplicates 缺失值处理 drop na 重命名