Pandas中怎么实现时间类型转换
Admin 2022-08-13 群英技术资讯 862 次浏览
今天这篇给大家分享的知识是“Pandas中怎么实现时间类型转换”,小编觉得挺不错的,对大家学习或是工作可能会有所帮助,对此分享发大家做个参考,希望这篇“Pandas中怎么实现时间类型转换”文章能帮助大家解决问题。案例1
问题:提取'W1|2022/7/28'字段中的年月日信息,取名为week_start,即一周开始的日期,并根据week_start计算出该周结束的具体日期week_end
import pandas as pd
import datetime
df1 = pd.DataFrame([[6,3],[6,3]], columns = ['Working day','W1|2022/7/28'])
# 一周开始的日期
# '2022/7/28'——>str类型
week_start = df1.columns[1].split('|')[1]
# 将start_day类型转换成date类型(2022-07-28)
week_start = datetime.datetime.strptime(week_start, '%Y/%m/%d').date()
# 一周结束的日期(2022-08-03)
week_end = week_start + datetime.timedelta(days=6)
df1

案例2
问题:根据'Date'字段生成'Date - 2'字段
import pandas as pd
from datetime import timedelta
from datetime import datetime
df2 = pd.DataFrame([[1,'20191031'],
[2,'20191106'],
[3,'20191106']],columns=['Id','Date'])
# 'Date'字段中的值减去2天,生成'Date - 2'字段
df2['Date - 2'] = df2['Date'].apply(lambda x:(datetime.strptime(x,'%Y%m%d') - timedelta(days=datetime.strptime(x,'%Y%m%d').weekday())).strftime("%Y%m%d"))
df2

案例3
问题:从字符串表示的日期时间中仅获取“年/月/日”
import pandas as pd
from datetime import datetime
df3 = pd.DataFrame([[1,'2017-01-02 00:00:00'],
[2,'2017-01-09 00:00:00']
],columns = ['Id','Wk'])
df3

错误写法
# 运行以下代码会报错'str' object has no attribute 'strftime'
df3['new_wk'] = df3['Wk'].apply(lambda x:x.strftime("%Y%m%d"))
正确写法
# 先利用.strptime()将str格式的变量转化成datetime下的时间格式
# 然后再利用.strftime()获取“年/月/日”
df3['Wk'] = df3['Wk'].apply(lambda x:datetime.strptime(x,"%Y-%m-%d %H:%M:%S"))
df3['new_Wk'] = df3['Wk'].apply(lambda x:x.strftime("%Y/%m/%d"))
处理过后的df3

案例4
问题:将'月/日/年 时间'格式的值转换为'年月日'(10/11/19 05:28:27 => 20191011)
import pandas as pd
df4 = pd.DataFrame([['A','10/11/19 05:28:27','08/04/20 08:38:59'],
['B','10/11/19 05:28:27',None],
['C','10/11/19 05:28:27',None]
],columns = ['site','creation_date','closure_date'])
df4

# 将'creation_date'栏位的值变形
# 10/11/19 05:28:27 => 20191011
df4['creation_date'] = df4['creation_date'].apply(lambda x:pd.to_datetime(x).strftime("%Y%m%d"))
# 将'closure_date'字段中nan值填充为0
df4['closure_date'] = df4['closure_date'].fillna(0)
# 筛选closure_date'字段中值为0的数据记录,取名为df4_na
df4_na = df4[df4['closure_date'].isin([0])]
# 筛选closure_date'字段中值不为0的数据记录,取名为df4
df4 = df4[~df4['closure_date'].isin([0])]
# 将'closure_date'栏位的值变形
# 08/04/20 08:38:59 => 20200804
df4['closure_date'] = df4['closure_date'].apply(lambda x:pd.to_datetime(x).strftime("%Y%m%d"))
df4 = pd.concat([df4, df4_na], ignore_index = True)
处理过后的df4

补充知识
我们通常使用pd.to_datetime()和s.astype('datetime64[ns]')来做时间类型转换
import pandas as pd
t = pd.Series(['20220720','20220724'])
# dtype: datetime64[ns]
new_t1 = pd.to_datetime(t)
new_t2 = t.astype('datetime64[ns]')
t

new_t1

new_t2

案例5
问题:添加字段'Week',逐行递增
import pandas as pd
df5 = pd.DataFrame(columns=['Week','Materials'])
all_material = ['A32456','B78495']
for row in range(0,3):
week = row + 1
datas = [week, all_material]
df5.loc[row] = datas
'''
df5:
Week Materials
0 1 [A32456, B78495]
1 2 [A32456, B78495]
2 3 [A32456, B78495]
'''
print(df5)
案例6
问题:日期型转换为字符型
import datetime
today = datetime.date.today() # date类型 2022-07-28
today.strftime('%Y-%m-%d') # '2022-07-28'
import datetime
dt = datetime.datetime.now() # datetime类型 2022-07-28 22:46:20.528813
dt.strftime('%Y-%m-%d') # '2022-07-28'
import datetime
today = str(datetime.date.today()) # str类型 2022-07-28
today.replace("-","") # '20220728'
案例7
问题:文本型转日期型
#文本型日期转为日期型日期
import pandas as pd
from datetime import datetime
df7=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
'城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})
df7

文本型转为日期型可用datetime.strptime函数
# "%Y-%m-%d"表示将文本日期解析为年月日的日期格式 df7['日期'] = df7['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))
文本型转为日期型也可用pd.to_datetime函数
# "%Y-%m-%d"表示将文本日期解析为年月日的日期格式 df7['日期'] = pd.to_datetime(df7['销售日期'],format='%Y-%m-%d')
处理过后的df7

案例8
问题:提取日期字段的年份、月份、日份和周数
import pandas as pd
from datetime import datetime
df8=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
'城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})
df8['日期'] = df8['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))
df8

#由日期数据提取年 df8['年份'] = df8['日期'].apply(lambda x: x.year) df8['年份'] =df8['年份'].astype(str)+'年' #由日期数据提取月 df8['月份'] = df8['日期'].apply(lambda x: x.month) df8['月份'] =df8['月份'].astype(str)+'月' #由日期数据提取日 df8['日份'] = df8['日期'].apply(lambda x: x.day) df8['日份'] =df8['日份'].astype(str)+'日' # 日期中的周使用date.isocalendar()[1]提取 #根据日期返回周数,以周一为第一天开始 df8['周数'] = [date.isocalendar()[1] for date in df8['日期'].tolist()] df8['周数'] = df8['周数'].astype(str)+'周'
处理后的df8

案例9
问题:借助offset时间偏移函数将日期加3天
import pandas as pd
from datetime import datetime
df9=pd.DataFrame({'销售日期':['2022-05-01','2022-05-02','2022-05-03','2022-05-04','2022-05-05','2022-05-06','2022-05-07','2022-05-08','2022-05-09','2022-05-10'],
'城市':['兰州','白银','天水','武威','金昌','陇南','嘉峪关','酒泉','敦煌','甘南']})
df9['日期'] = df9['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))
df9

#借助offset时间偏移函数将日期加3天 from pandas.tseries.offsets import Day df9['日期_3']=df9['日期']+Day(3)
处理后的df9

案例10
问题:将文本型日期转换为日期型日期
#文本型日期转为日期型日期
import pandas as pd
import datetime as dt
from datetime import datetime
df1=pd.DataFrame({'销售时间':['2022-05-01 00:00:00','2022-05-02 00:00:00','2022-05-03 00:00:00','2022-05-04 00:00:00','2022-05-05 00:00:00',
'2022-05-06 00:00:00','2022-05-07 00:00:00','2022-05-08 00:00:00','2022-05-09 00:00:00','2022-05-10 00:00:00',]})
#df['日期']=df['销售日期'].map(lambda x:datetime.strptime(x,"%Y-%m-%d"))
df1['日期_x']=df1['销售时间'].str.split(' ',expand=True)[0]
df1['日期_y']=pd.to_datetime(df1['销售时间'],format='%Y-%m-%d')
df1
df10

日期中带有时分秒'00:00:00',有如下方法将其处理为'%Y-%m-%d'形式
df10['日期']=df10['销售时间'].str.split(' ',expand=True)[0]
处理后的df10

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文实例讲述了Laravel5.1 框架文件管理操作。分享给大家供大家参考,具体如下:Laravel提供了一套很好用的文件系统 方便于管理文件夹和文件,支持Amazon S3和Rackspace云存储等驱动。
对初学PHP的人来说,empty()和isset()的用法区别很难搞清楚。针对这个问题,这篇文章就主要给大家介绍一下empty()和isset()的判断变量区别是什么,有这方面学习需求的朋友可以看一下。
php中array_splice()移除元素:1、从数组中取出一段,返回根据 offset 和 length 参数所指定的 array 数组中的一段序列;2、 array_slice() 将忽略键名,并且是根据单元在数组中实际位置来计算的。
PHP中的变量覆盖是怎么回事,如何进行漏洞修复?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
当我们在使用validate等方法进行验证时,如果是错误,则会返回首页,那么这个跳转到首页如何实现的呢?今天小编给大家分享一篇教程关于Laravel使用验证时跳转到首页的解决办法,一起看看吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008