教你怎么用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实现字符串转日期的文章就介绍到这了