教你怎么用python实现字符串转日期
          发布时间:2021-06-22 15:26:45
          
                              
                          
一、生成日期数据
1 2  | import pandas as pd
 pd.date_range( )
  | 
同生成随机数的思想类似,使用pandas库中的函数
1  | pd.date_range(start=None,end=None,periods=None,freq=None,tz=None,normalize=False,name=None,close=None,**kwargs)
  | 
1.1 设定开始时间、长度、频率
1 2 3 4  | start_date='20200101'
 length=10
 date_1=pd.date_range(start=start_date,periods=10).tolist()  
 date_1
  | 

也可以设置频率freq=‘M'
1  | date_1=pd.date_range(start=start_date,periods=10,freq='M')
  | 

1.2 设定起始、终止时间、频率
1 2 3 4  | start_date='20200101'
 end_date='20200110'
 date_2=pd.date_range(start=start_date,end=end_date,freq='D')  
 date_2
  | 

频率freq的设置有:
1 2 3 4 5 6 7  | D --- Day --- 每日
 B --- BusinessDay --- 每工作日
 H --- Hour --- 每小时
 T/min --- Minute ---每分钟
 S --- Second --- 每秒
 M --- MonthEnd --- 每月最后一个日历日
 Q --- Quater --- 每季度
  | 
注意上面生成的日期数据,就是list格式,在构建数据框时可以直接用。
1  | pd.DataFrame({'Time':date_1})
  | 

二、字符串转化为日期
导入数据时常会出现,日期型数据导入后,变成字符串格式,在后续使用时,需要转化为日期。
构造一个时间数据
1 2 3 4 5 6 7  | date_list1=pd.date_range(start=start_date,periods=gap).strftime('%Y%m%d').tolist()   
 num1=np.random.randint(1,101,100)   
 num2=np.random.randint(100,201,100)
 df_temp=pd.DataFrame({'Time':date_list1,
                      'Number1':num1,
                      'Number2':num2})
 df_temp.head()
  | 

上面数据构造时,为了方便之后举例子,将生成的时间数据转化为字符串后,构造的数据框。
2.1 pd.to_datetime()
1 2  | print(df_temp['Time'].dtype)
 print(pd.to_datetime(df_temp['Time']).dtype)
  | 
输出:
object
datetime64[ns]
pd.datetime这个函数可以直接作用在数据框的列上面,直接转换。
2.2 datetime.strptime
注意区分:
1 2 3  | from datetime import datetime
 datetime.strftime() 
 datetime.strptime()  
  | 
例子:
1 2 3  | print(datetime.strptime('20200101','%Y%m%d'))
   print(datetime.strptime('2020-01-01','%Y-%m-%d'))
  | 
输出:
2020-01-01 00:00:00
2020-01-01 00:00:00
但是这个函数只能作用一个值,如果对数据框的列进行操作,需要首先定义一个函数:
1 2 3 4 5 6 7  | from datetime import datetime
 def date_ch(value):
     return datetime.strptime(value,'%Y%m%d')
   print(date_ch('20200812'))
 df_temp['Time']=df_temp['Time'].apply(date_ch)
 df_temp['Time']
  | 

三、从日期数据中提取成分
3.1 直接提取:
1 2 3 4 5 6  | pd.to_datetime('20200307').month
    | 
输出:
3
3.2 使用strftime函数:
1  | pd.to_datetime('20200101').strftime('%Y-%m')
  | 
输出:
‘2020-01'
3.3 字符串切片截取
数据如下:

1 2 3 4 5 6 7  | def date_ch(value):
     str_value=value.strftime('%Y-%m-%d')
     month=str_value[5:7]
     return month
 df_temp['Time'].apply(date_ch)
  | 

strftime函数提取日期成分中,日期的标准化格式符号:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23  | %a  星期的简写。如 星期三为Web
 %A  星期的全写。如 星期三为Wednesday
 %b  月份的简写。如4月份为Apr
 %B  月份的全写。如4月份为April 
 %c:  日期时间的字符串表示。(如: 05/01/10 09:00:20)
 %d:  日在这个月中的天数
 %f:  微秒(范围[0,999999])
 %H:  小时(24小时制,[0, 23])
 %I:  小时(12小时制,[0, 11])
 %j:  日在年中的天数 [001,366]
 %m:  月份([01,12])
 %M:  分钟([00,59])
 %p:  AM或者PM
 %S:  秒(范围为[00,61])
 %U:  周在当年的周数当年的第几周),星期天作为周的第一天
 %w:  今天在这周的天数,范围为[0, 6],6表示星期天
 %W:  周在当年的周数,星期一作为周的第一天
 %x:  日期字符串(如:05/01/20)
 %X:  时间字符串(如:09:00:20)
 %y:  2个数字表示的年份
 %Y:  4个数字表示的年份
 %z:  与utc时间的间隔 (如果是本地时间,返回空字符串)
 %Z:  时区名称(如果是本地时间,返回空字符串)
  | 
到此这篇关于教你怎么用python实现字符串转日期的文章就介绍到这了