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

更新时间:2023-07-06 23:51:29 阅读: 评论:0

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
02022-01-011
12022-01-055
22022-11-055
date      object
value    int64
dtype:object
上⾯的结果中,date列的类型被读作object类型,⽽不是⼀个datetime类型
⼀个简单的⽅式是让pandas解析⽇期,传⼊参数par_date给read_csv⽅法,会得到datetime对象的date列:
df = pd.read_csv("date_text.csv", par_dates=["date"])
print(df)
print(df.dtypes)
输出
自行车修理date  value
02022-01-011
12022-01-055
22022-11-055
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", par_dates={"date":["y","m","d"]})
print(df)
为了从多列中解析出⼀个⽇期列,只需要给par_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", par_dates=["date"], dayfirst=True)
80后童年游戏print(df)
df = pd.read_csv("date_text.csv", par_dates=["date"], dayfirst=Fal)
print(df)
输出
date  value
02022-02-012
12022-03-013
22022-05-115
date  value
02022-01-022
12022-01-033
22022-11-055
除了使⽤dayfirst参数,也可以使⽤参数infer_datetime_format,将其设置为True,会⾃动推断默认的⽇期类型
指定date_parr来确定⾃定义的特殊的⽇期格式
假设输⼊的格式是这样的:
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", par_dates=["date"], infer_datetime_format=True)
print(df)
输出
date  value
0      Jan_01_2022      2
1      Jun_03_202
2      3
2      NOV_05_2022      5
此时可以指定date_parr来执⾏解析
from datetime import datetime
fmt ="%b_%d_%Y"
df = pd.read_csv("date_text.csv", par_dates=["date"], date_parr=lambda x: datetime.strptime(x, fmt))
疲倦不堪print(df)
输出
02022-01-012
12022-06-033尘埃落定小说简介
22022-11-055
⿇烦的是确定strptime的⽇期格式,不过你可以在上参考字符串⽇期解析成⽇期对象的格式
3.转换为datetime类型
可以使⽤pandas的to_datetime⽅法():
<_datetime(arg, errors=‘rai’, dayfirst=Fal,
yearfirst=Fal, utc=None, format=None, exact=True, unit=None,
infer_datetime_format=Fal, 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.offts.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)
# clod指定开闭区间,略
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
002021-11-0200:00:00  UTC+08:00
112021-11-0300:00:00  UTC+08:00
222021-11-0400:00:00  UTC+08:00
332021-11-0500:00:00  UTC+08:00
442021-11-0600:00:00  UTC+08:00
552021-11-0700:00:00  UTC+08:00
662021-11-0800:00:00  UTC+08:00
6.转换时区
⽣成utc+8时区的⼀个范围时间,然后使⽤tz_convert⽅法转换时区,使⽤strftime⽅法转换格式# 指定时区偏移
tz_offt =8
utc_ofst =3600*tz_offt
# ⽣成指定时区的范围⽇期
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([_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.FixedOfft(480)]', freq='D')
['2021-11-27 16:00:00','2021-11-28 16:00:00','2021-11-29 16:00:00']

本文发布于:2023-07-06 23:51:29,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1070880.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指定   范围   对象   类型   格式   需要   字符串   解析
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图