pandas处理日期的几种常用方法

1.读取字符串日期

写入csv 文件

    csv_text = """date, value
2022-01-01, 1
2022-01-05, 5
2022-11-05, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取日期

df = pd.read_csv("date_text.csv")
print(df)
print(df.dtypes)

输出

         date   value
0  2022-01-01       1
1  2022-01-05       5
2  2022-11-05       5
date      objectvalue     int64
dtype: object

上面的结果中,date列的类型被读作object类型,而不是一个datetime类型
一个简单的方式是让pandas解析日期,传入参数parse_date给read_csv方法,会得到datetime对象的date列:

df = pd.read_csv("date_text.csv", parse_dates=["date"])
print(df)
print(df.dtypes)

输出

        date   value
0 2022-01-01       1
1 2022-01-05       5
2 2022-11-05       5
date      datetime64[ns]value             int64
dtype: object

pandas中融合了很强大的日期解析方法,许多类型的日期都可以自动解析

有时候数据格式是这样的:

csv_text = """y,m,d,value
2022,01,02, 2
2022,01,03, 3
2022,11,05, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取日期的方式

df = pd.read_csv("date_text.csv", parse_dates={"date": ["y", "m", "d"]})
print(df)

为了从多列中解析出一个日期列,只需要给parse_dates参数传入一个字典对象指定要解析的列即可

2.指定日期格式

对于日期01/11/2022,格式可以理解为mm/dd/yyyy解析得到2022-01-11,也可以理解为dd/mm/yyyy解析得2022-11-01,是存在这样的不同的使用格式的,要明确格式,可以指定dayfirst参数:
写入csv文件

csv_text = """date,value
01/02/2022, 2
01/03/2022, 3
11/05/2022, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

读取数据

df = pd.read_csv("date_text.csv", parse_dates=["date"], dayfirst=True)
print(df)
df = pd.read_csv("date_text.csv", parse_dates=["date"], dayfirst=False)
print(df)

输出

        date  value
0 2022-02-01      2
1 2022-03-01      3
2 2022-05-11      5date  value
0 2022-01-02      2
1 2022-01-03      3
2 2022-11-05      5

除了使用dayfirst参数,也可以使用参数infer_datetime_format,将其设置为True,会自动推断默认的日期类型

指定date_parser来确定自定义的特殊的日期格式
假设输入的格式是这样的:

csv_text = """date,value
Jan_01_2022, 2
Jun_03_2022, 3
NOV_05_2022, 5
"""
with open("date_text.csv", "w") as f:f.write(csv_text)

使用infer_datetime_format参数是没办法推断出日期格式的

df = pd.read_csv("date_text.csv", parse_dates=["date"], infer_datetime_format=True)
print(df)

输出

              date  value
0      Jan_01_2022      2
1      Jun_03_2022      3
2      NOV_05_2022      5

此时可以指定date_parser来执行解析

from datetime import datetime
fmt = "%b_%d_%Y"
df = pd.read_csv("date_text.csv", parse_dates=["date"], date_parser=lambda x: datetime.strptime(x, fmt))
print(df)

输出

        date  value
0 2022-01-01      2
1 2022-06-03      3
2 2022-11-05      5

麻烦的是确定strptime的日期格式,不过你可以在这个网站上参考字符串日期解析成日期对象的格式

3.转换为datetime类型

可以使用pandas的to_datetime方法(参考pandas官网):

pandas.to_datetime(arg, errors=‘raise’, dayfirst=False,
yearfirst=False, utc=None, format=None, exact=True, unit=None,
infer_datetime_format=False, origin=‘unix’, cache=True)

dt = pd.to_datetime("01 Jan, 2022")
print(dt)
dt_li = pd.to_datetime(["01 Jan, 2022", "11/11/2022", "2222/12/12"])
print(dt_li)

to_datetime方法包含了绝大多数你需要执行的操作,而且arg既可以传入一个日期字符串参数也可以传入一个日期字符串列表

4.创建范围日期

使用pandas的date_range方法创建指定范围的日期
指定开始日期start和结束日期end创建范围类的日期

date_list = ["2021-11-01", "2021-11-05"]
date_range = pd.date_range(date_list[0], date_list[1])
print(date_range)

输出

DatetimeIndex(['2021-11-01', '2021-11-02', '2021-11-03', '2021-11-04','2021-11-05'],dtype='datetime64[ns]', freq='D')

传入start日期或者end日期并传入period指定范围长度

start = "2021-11-01"
date_range1 = pd.date_range(start=start, periods=7)
print(date_range1)end = "2021-11-01"
date_range2 = pd.date_range(end=end, periods=7)
print(date_range2)
DatetimeIndex(['2021-11-01', '2021-11-02', '2021-11-03', '2021-11-04','2021-11-05', '2021-11-06', '2021-11-07'],dtype='datetime64[ns]', freq='D')
DatetimeIndex(['2021-10-26', '2021-10-27', '2021-10-28', '2021-10-29','2021-10-30', '2021-10-31', '2021-11-01'],dtype='datetime64[ns]', freq='D')

间隔类型指定为年(Y)、月(M)、时(H)等,指定timezone已经左右开闭

# 以月份为间隔
end = "2021-11-30"
month_range1 = pd.date_range(end=end, periods=3, freq='2M')     # freq也可以用pd.offsets.MonthEnd(2)
print(month_range1)# tz指定时区
end = "2021-11-30"
month_range2 = pd.date_range(end=end, periods=3, freq='2H', tz="UTC+08:00")
print(month_range2)
# closed指定开闭区间,略
DatetimeIndex(['2021-07-31', '2021-09-30', '2021-11-30'], dtype='datetime64[ns]', freq='2M')
DatetimeIndex(['2021-11-29 20:00:00+08:00', '2021-11-29 22:00:00+08:00','2021-11-30 00:00:00+08:00'],dtype='datetime64[ns, UTC+08:00]', freq='2H')

5.提取datetime对象的date,time等部分

使用pandas的dt accessor提取datetime对象中的各部分

start = "2021-11-02"
date_range1 = pd.date_range(start=start, periods=7, tz="UTC+08:00")
df = pd.DataFrame({"value": [i for i in range(7)], "date": date_range1})
# print(df)
df["date"], df["time"], df["tz"] = df["date"].dt.date, df["date"].dt.time, df["date"].dt.tz
print(df)
# (还可以提取weekday之类的!)
# print("weekday: \n", df["date"].dt.weekday)
   value        date      time         tz
0      0  2021-11-02  00:00:00  UTC+08:00
1      1  2021-11-03  00:00:00  UTC+08:00
2      2  2021-11-04  00:00:00  UTC+08:00
3      3  2021-11-05  00:00:00  UTC+08:00
4      4  2021-11-06  00:00:00  UTC+08:00
5      5  2021-11-07  00:00:00  UTC+08:00
6      6  2021-11-08  00:00:00  UTC+08:00

6.转换时区

生成utc+8时区的一个范围时间,然后使用tz_convert方法转换时区,使用strftime方法转换格式

# 指定时区偏移
tz_offset = 8
utc_ofst = 3600*tz_offset
# 生成指定时区的范围日期
end = "2021-11-30"
dates = pd.date_range(end=end, periods=3, tz=utc_ofst)
print(dates)
# 将日期时间转换为0时区时间,然后格式化成字符串
fmt = "%Y-%m-%d %H:%M:%S"
print([date.tz_convert(pytz.utc).strftime(fmt) for date in dates])
DatetimeIndex(['2021-11-28 00:00:00+08:00', '2021-11-29 00:00:00+08:00','2021-11-30 00:00:00+08:00'],dtype='datetime64[ns, pytz.FixedOffset(480)]', freq='D')
['2021-11-27 16:00:00', '2021-11-28 16:00:00', '2021-11-29 16:00:00']

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

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

相关文章

OAD 空中升级

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/69222/172351.aspx#172351第二十三节 OAD空中升级 通过仿真器更新程序或者通过USB更新固件那都是一般人都可以实现的操作,但是要想实现OAD空中升级…

SCI论文写作训练营笔记汇总02_英文科技论文阅读与解析

3、英文科技论文阅读与解析的方法 3.1 科技论文介绍 3.1.1 科技论文的类型 • Research • Review • Theoretical • Methodological • Case study 3.1.2 研究型论文的结构 3.1.3 科技论文的基本结构 3.2 文献阅读 3.2.1 文献选择的原则 3.2.2 文献阅读顺序 3.2.2 文献阅读…

9.带有返回值的函数

<!DOCTYPE html><html><body> <p>本例调用的函数会执行一个计算&#xff0c;然后返回结果&#xff1a;</p> <p id"demo"></p> <script>function myFunction(a,b){return a*b;} document.getElementById("demo&…

报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused

&#xff08;pyenv install xxx&#xff09; 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused的解决方法 问题重现截图&#xff1a; 在查看下面的原因和使用解决方法之前&#xff0c;确保自己的pyenv已经安装好了最新的python-build&#xff0c…

linux通过I2C地址查看设备名称

 root@android:/sys/bus/i2c # cd devices cd devices root@android:/sys/bus/i2c/devices # ls ls 0-0020 0-0022 0-0036 0-0078 1-000c 1-000d 1-001d 1-0028 1-0029 1-002a 1-0038 1-0060 1-0068 2-001c i2c-0 i2c-1 i2c-2 root@android:/sys/bus/i2c/devices # cd 0-00…

SCI论文写作训练营笔记汇总03_科技论文写作(方法篇)

4、科技论文写作——方法篇 4.1 准备工作与概述 4.1.2 杂志编辑评估文章的标准 4.2 图表部分的写作方法 4.2.1 为什么使用图表 4.2.2 如何使用图表 4.2.3 如何选择图or表or文字 4.2.4 图片/表格制作软件 4.2.5 图片的各种指标 4.2.6 图片的分类 4.2.6 图注的使用 4.2.7 表格 …

跨域获取

本地&#xff1a; <?php$_arr array(a>1,b>2,c>3);$_result json_encode($_arr);echo $_result; ?> //本地获取$(form input[typebutton]).click(function(){$.ajax({type:"post",url:"test.php",async:true,dataType:json,success:fun…

python 嵌套型partials(nested partials)的使用

Python嵌套型partial的使用 partial对象中包含partial对象的使用 要实现的目标&#xff0c;简单示例&#xff1a; from functools import partialdef func1(f):return fdef func2(f1):return f1def func(n):return np partial(func2, partial(func1, partial(func, 5))) pri…

SCI论文写作训练营笔记汇总04_科技论文写作(技巧篇)

1、语言点 1.1 时态 1.1.1 时态使用的基本原则 1.1.2 在引言部分的时态使用 1.1.3 在“材料与方法”部分的时态使用 1.1.4 在“结果”部分的时态使用 1.1.5 在“讨论”部分的时态使用 1.1.6 总结 1.2 语态 1.2.1 语态-主动/被动 1.2.2 语态-主动/被动的不同点 1.2.2 语态-主…

做怎样的一个自己

1、如果总是患得患失&#xff0c;即使一时的成功&#xff0c;也不可能找到正确的自己。 2、这一次的创业机会错失了&#xff0c;是一件非常遗憾的事。 3、可是我会是更好的我&#xff0c;明天的我会是更加优秀的我&#xff0c;我将要遇见那个超过自己我我。 为自己努力&#…

SCI论文写作训练营笔记汇总05_英文论文投稿流程与常见问题(完)

1 目标期刊的选择 1.1 文章未送审直接被拒稿的常见理由 1.2 目标期刊的选择 1.2.1 学科与影响力 1.2.2 影响因子 1.2.3 审稿平均周期 1.2.4 主编水平 1.2.5 版面费 2 根据期刊要求调整文章 2.1 具体 2.2 期刊的审查重点 2.3 期刊的审查列表 3 其他材料 3.1 稿件作者信息 3.…

【bzoj1738】[Usaco2005 mar]Ombrophobic Bovines 发抖的牛 Floyd+二分+网络流最大流

题目描述 FJs cows really hate getting wet so much that the mere thought of getting caught in the rain makes them shake in their hooves. They have decided to put a rain siren on the farm to let them know when rain is approaching. They intend to create a rai…

动态规划思路和Python解决零钱兑换问题和最大乘积子序列的乘积的问题

动态规划&#xff08;Dynamic Programming&#xff09;思路和Python解题示例 动态规划是一种主要用来优化朴素递归的方法&#xff0c;每当输入不同值调用递归函数出现大量重复的&#xff08;子&#xff09;输入和调用&#xff08;返回结果&#xff09;时&#xff0c;就可以考虑…

open(/dev/ietctl, O_RDWR) 参数含义

这是文件I/O的常用函数&#xff0c;open函数&#xff0c;open函数用来打开一个设备&#xff0c;他返回的是一个整型变量&#xff0c;如果这个值等于-1&#xff0c;说明打开文件出现错误&#xff0c;如果为大于0的值&#xff0c;那么这个值代表的就是文件描述符。一般的写法是if…

【Pytorch神经网络实战案例】06 逻辑回归拟合二维数据

1 逻辑回归与拟合过程 1.1 准备数据-code_01_moons.py&#xff08;第1部分&#xff09; import sklearn.datasets import torch import numpy as np import matplotlib.pyplot as plt from LogicNet_fun import LogicNet,plot_losses,predict,plot_decision_boundary# 1.1 准…

将Win10包含中文的用户名改为英文的,同时解决Anaconda navigator无法运行jupyter的问题

Win10用户名包含中文字符导致无法在Anaconda navigator直接运行jupyter的问题 本篇文章内容包含&#xff1a; WIN10如何修改"C:\Users\用户名"中的用户名执行1后&#xff0c;也就是用户名修改为英文名后&#xff0c;在Anaconda navigator启动之前无法启动的jupyter…

linux dd使用记录

dd if/dev/sda of/dev/sdb bs10M Linux下显示dd命令的进度&#xff1a;dd if/dev/zero of/tmp/zero.img bs10M count100000想要查看上面的dd命令的执行进度&#xff0c;可以使用下面几种方法&#xff1a; 比如&#xff1a;每5秒输出dd的进度 方法一&#xff1a;watch -n 5 pkil…

【Pytorch神经网络理论篇】 01 Pytorch快速上手(一)概述+张量

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

Python写一个字符串的数字后缀部分递增的函数

需求&#xff1a; Python处理重名字符串&#xff0c;添加或递增数字字符串后缀 对于2个重名的字符串&#xff0c;添加数字后缀&#xff0c;比如两个重复的字符串s1 “name”, s2 “name”&#xff0c;将s2的名称设置为name_1对应3个或多个重名的字符串&#xff0c;数字部分实…

【Pytorch神经网络理论篇】 02 Pytorch快速上手(二)GPU与CPU张量切换+具有随机值的张量+张量的数学运算

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…