Python字符串转日期:pd.date_range、to_datetime与strftime详解

Luna
Luna
发布时间:2026-10-14 | 4人浏览过
原创

本文详解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字符串转日期的内容可搜索本站历史文章或继续浏览后续文章,感谢支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表