欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python开发中 日期与时间相关的操作总结

程序员文章站 2022-04-22 11:42:05
pd.to_datetime()最简单的使用形式pd.to_datetime(df['单据日期'])默认使用这个方法必须是 “年-月-日”“ 时-分-秒”的格式(这二者都有或者只包含任一个)固定用法#提取日期和时间,使用的时候直接赋值就行了df['单据日期'].dt.datedf['单据日期'].dt.time#提取年月日时分秒,可按需求生成对应列df['单据日期'].dt.yeardf['单据日期'].dt.monthdf['单据日期'].dt.daydf['单据日期']...

pd.to_datetime()

  1. 最简单的使用形式
pd.to_datetime(df['单据日期']) 

默认使用这个方法必须是 “年-月-日”“ 时-分-秒”的格式(这二者都有或者只包含任一个)

  1. 固定用法
#提取日期和时间,使用的时候直接赋值就行了 df['单据日期'].dt.date
df['单据日期'].dt.time #提取年月日时分秒,可按需求生成对应列 df['单据日期'].dt.year
df['单据日期'].dt.month
df['单据日期'].dt.day
df['单据日期'].dt.hour
df['单据日期'].dt.minute #最后得到的是字符串型的数据 
  1. 复杂的使用场景
    若DataFrame中只有年、月、日、小时这样单独的列,且数据类型是数值型时,我们可以先将数值型数据转化为字符串型,然后用字符串拼接的方式拼出 “年-月-日”“ 时-分-秒”的格式,再用pd.to_datetime的方法。
  • 数值型转化为字符串型
#数值型转化为字符串型 df_new['year'] = df_new['year'].apply(str) df_new['month'] = df_new['month'].apply(str) df_new['day'] = df_new['day'].apply(str) df_new['hour'] = df_new['hour'].apply(str) 
  • 合并字符串
    单个字符串的操作方法在DataFrame列与列之间也可以直接使用
df_new["时间"]=df_new['year']+'-'+df_new['month']+'-'+df_new['day']+' '+df_new['hour']+':'+'00'+":"+'00' 
  • pd.to_datetime
df_new['时间']=pd.DataFrame(pd.to_datetime(df_new['时间'])) 
  1. 注意
    日期时间格式虽然进行相关的时间操作非常方便,但日期格式不能进行相关性分析,这是一个弊端

获取月份第一天和最后一天

from datetime import datetime import calendar def getMonthFirstDayAndLastDay(year=None, month=None): """
    :param year: 年份,默认是本年,可传int或str类型
    :param month: 月份,默认是本月,可传int或str类型
    :return: firstDay: 当月的第一天,datetime.date类型
              lastDay: 当月的最后一天,datetime.date类型
    """ if year: year = int(year) else: year = datetime.now().year if month: month = int(month) else: month = datetime.now().month # 获取当月第一天的星期和当月的总天数 firstDayWeekDay, monthRange = calendar.monthrange(year, month) # 获取当月的第一天 firstDay = datetime.date(datetime(year=year, month=month, day=1)) lastDay = datetime.date(datetime(year=year, month=month, day=monthRange)) return firstDay, lastDay 

python开发中 日期与时间相关的操作总结
这个函数默认返回一个元组,可以通过切片获取自己需要的信息

获取两个日期之间的月份差

#获取两个日期之间的月份差 from datetime import datetime def months_sub(str1,str2): #这里输入的日期格式是"%Y%m%d" year1=datetime.strptime(str1[0:8],"%Y%m%d").year
    year2=datetime.strptime(str2[0:8],"%Y%m%d").year
    month1=datetime.strptime(str1[0:8],"%Y%m%d").month
    month2=datetime.strptime(str2[0:8],"%Y%m%d").month
    num=(year1-year2)*12+(month1-month2) return num #我们当然可以对输入的日期格式进行调整,比如输入"%Y-%m-%d",但相应的字符串的切片就要变成[0:10] 

月份相加减

from datetime import datetime from dateutil.relativedelta import relativedelta (datetime(2019,1,12) + relativedelta(3)).strftime('%Y%m%d') #月份的加减可以作用到年份上,实现跨年的功能 

获取周数

Year_week_day = pd.DataFrame(map(lambda x: x.isocalendar(),df['日期']),columns=['年号','第几周','第几天']) Year_week_day 

时间型与字符串型的相互转化

  1. 时间型转变为字符串
# 方法一 str(datetime(2011, 1, 3)) # 方法二 datetime(2011, 1, 3).strftime('%Y-%m-%d') # 在表格中的操作 df['时间'] = df['时间'].apply(lambda x: x.strftime('%Y-%m-%d')) 
  1. 字符串转变成时间型
# 方法一 value = '2011-01-03' datetime.strptime(value, '%Y-%m-%d') #'%Y-%m-%d'是用来解析'2011-01-03'的各部分意味着什么 # 方法二 from dateutil.parser import parse
parse('2011-01-03') # 方法三 pd.to_datetime('2020-05-07') 

本文地址:https://blog.csdn.net/Bing_yu_Forever/article/details/108239590