Python字符串转日期:pd.date_range、to_datetime与strftime详解
本文详解Python中处理日期数据的三种核心方法:利用pd.date_range生成指定频率的日期序列,通过pd.to_datetime快速将字符串列转换为datetime64类型,以及使用strftime和切片提取年月日等时间成分。涵盖频率设置、批量转换及格式符号对照,适用于数据清洗与时间序列分析场景。
一、生成日期数据
import pandas as pd
pd.date_range( )
与生成随机数的逻辑相似,我们可以借助pandas库提供的内置函数来创建日期序列。
pd.date_range(start=None,end=None,periods=None,freq=None,tz=None,normalize=False,name=None,close=None,**kwargs)
1.1 设定开始时间、长度、频率
start_date='20200101'
length=10
date_1=pd.date_range(start=start_date,periods=10).tolist() #默认freq为D,每天
date_1

此外,还可以指定频率参数freq='M'以按月为单位生成数据。
date_1=pd.date_range(start=start_date,periods=10,freq='M')

1.2 设定起始、终止时间、频率
start_date='20200101'
end_date='20200110'
date_2=pd.date_range(start=start_date,end=end_date,freq='D') #默认为D
date_2

关于频率freq的具体设置选项如下:
D --- Day --- 每日
B --- BusinessDay --- 每工作日
H --- Hour --- 每小时
T/min --- Minute ---每分钟
S --- Second --- 每秒
M --- MonthEnd --- 每月最后一个日历日
Q --- Quater --- 每季度
需要注意的是,上述方法生成的日期数据为list格式,在构建DataFrame时可以直接使用该列表。
pd.DataFrame({'Time':date_1})

二、字符串转化为日期
在导入外部数据时,经常遇到日期字段被识别为字符串格式的情况,这在后续进行时间序列分析时需要转换为标准的日期类型。
首先构造一组时间数据作为示例。
date_list1=pd.date_range(start=start_date,periods=gap).strftime('%Y%m%d').tolist()
num1=np.random.randint(1,101,100) #生成1-101的随机整数
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()
print(df_temp['Time'].dtype)
print(pd.to_datetime(df_temp['Time']).dtype)
执行结果如下:
object datetime64[ns]
pd.to_datetime函数可以直接应用于数据框的某一列,实现原地转换。
2.2 datetime.strptime
使用时需注意区分以下两种方法:
from datetime import datetime
datetime.strftime() #由日期格式转化为字符串
datetime.strptime() #由字符串格式转化为日期
具体示例如下:
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
然而,该函数仅能处理单个值,若需对数据框的整列进行操作,必须先定义一个转换函数。
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 直接提取:
pd.to_datetime('20200307').month
#year:日
#month:月
#week:周
#day:日
输出结果:
3
3.2 使用strftime函数:
pd.to_datetime('20200101').strftime('%Y-%m')
输出结果:
'2020-01'
3.3 字符串切片截取
相关数据如下:

def date_ch(value):
str_value=value.strftime('%Y-%m-%d')
month=str_value[5:7]
return month
df_temp['Time'].apply(date_ch)
#或者
#df_temp['Time'].apply(lambda x:date_ch(x))

在使用strftime函数提取日期成分时,需遵循日期的标准化格式符号:
%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实现字符串转日期的主要方法,更多关于python字符串转日期的内容可搜索本站历史文章或继续浏览后续文章,感谢支持!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













