App下載

python如何將字符串轉(zhuǎn)成日期?

來源: 花開一夜 2021-07-15 10:23:17 瀏覽數(shù) (8289)
反饋

一、生成日期數(shù)據(jù)

import pandas as pd
pd.date_range( )

同生成隨機(jī)數(shù)的思想類似,使用pandas庫中的函數(shù)

pd.date_range(start=None,end=None,periods=None,freq=None,tz=None,normalize=False,name=None,close=None,**kwargs)

1.1 設(shè)定開始時(shí)間、長(zhǎng)度、頻率

start_date='20200101'
length=10
date_1=pd.date_range(start=start_date,periods=10).tolist()  #默認(rèn)freq為D,每天
date_1

生成日期數(shù)據(jù)

也可以設(shè)置頻率freq=‘M'

date_1=pd.date_range(start=start_date,periods=10,freq='M') 

生成隨機(jī)日期數(shù)據(jù)

1.2 設(shè)定起始、終止時(shí)間、頻率

start_date='20200101'
end_date='20200110'
date_2=pd.date_range(start=start_date,end=end_date,freq='D')  #默認(rèn)為D
date_2

時(shí)間數(shù)據(jù)生成的設(shè)定

頻率freq的設(shè)置有:

D --- Day --- 每日
B --- BusinessDay --- 每工作日
H --- Hour --- 每小時(shí)
T/min --- Minute ---每分鐘
S --- Second --- 每秒
M --- MonthEnd --- 每月最后一個(gè)日歷日
Q --- Quater --- 每季度

注意上面生成的日期數(shù)據(jù),就是list格式,在構(gòu)建數(shù)據(jù)框時(shí)可以直接用。

pd.DataFrame({'Time':date_1})

時(shí)間數(shù)據(jù)list

二、字符串轉(zhuǎn)化為日期

導(dǎo)入數(shù)據(jù)時(shí)常會(huì)出現(xiàn),日期型數(shù)據(jù)導(dǎo)入后,變成字符串格式,在后續(xù)使用時(shí),需要轉(zhuǎn)化為日期。

構(gòu)造一個(gè)時(shí)間數(shù)據(jù)

date_list1=pd.date_range(start=start_date,periods=gap).strftime('%Y%m%d').tolist()   
num1=np.random.randint(1,101,100)   #生成1-101的隨機(jī)整數(shù)
num2=np.random.randint(100,201,100)
df_temp=pd.DataFrame({'Time':date_list1,
                     'Number1':num1,
                     'Number2':num2})
df_temp.head()

時(shí)間數(shù)據(jù)list

上面數(shù)據(jù)構(gòu)造時(shí),為了方便之后舉例子,將生成的時(shí)間數(shù)據(jù)轉(zhuǎn)化為字符串后,構(gòu)造的數(shù)據(jù)框。

2.1 pd.to_datetime()

print(df_temp['Time'].dtype)
print(pd.to_datetime(df_temp['Time']).dtype)

輸出:

object
datetime64[ns]

pd.datetime這個(gè)函數(shù)可以直接作用在數(shù)據(jù)框的列上面,直接轉(zhuǎn)換。

2.2 datetime.strptime

注意區(qū)分:

from datetime import datetime
datetime.strftime() #由日期格式轉(zhuǎn)化為字符串
datetime.strptime()  #由字符串格式轉(zhuǎn)化為日期

例子:

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

但是這個(gè)函數(shù)只能作用一個(gè)值,如果對(duì)數(shù)據(jù)框的列進(jìn)行操作,需要首先定義一個(gè)函數(shù):

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']

數(shù)據(jù)類型轉(zhuǎn)換

三、從日期數(shù)據(jù)中提取成分

3.1 直接提取:

pd.to_datetime('20200307').month

#year:日
#month:月
#week:周
#day:日

輸出:

3

3.2 使用strftime函數(shù):

pd.to_datetime('20200101').strftime('%Y-%m')

輸出:

‘2020-01'

3.3 字符串切片截取

數(shù)據(jù)如下:

字符串切片

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函數(shù)提取日期成分中,日期的標(biāo)準(zhǔn)化格式符號(hào):

%a  星期的簡(jiǎn)寫。如 星期三為Web
%A  星期的全寫。如 星期三為Wednesday
%b  月份的簡(jiǎn)寫。如4月份為Apr
%B  月份的全寫。如4月份為April 
%c:  日期時(shí)間的字符串表示。(如: 05/01/10 09:00:20)
%d:  日在這個(gè)月中的天數(shù)
%f:  微秒(范圍[0,999999])
%H:  小時(shí)(24小時(shí)制,[0, 23])
%I:  小時(shí)(12小時(shí)制,[0, 11])
%j:  日在年中的天數(shù) [001,366]
%m:  月份([01,12])
%M:  分鐘([00,59])
%p:  AM或者PM
%S:  秒(范圍為[00,61])
%U:  周在當(dāng)年的周數(shù)當(dāng)年的第幾周),星期天作為周的第一天
%w:  今天在這周的天數(shù),范圍為[0, 6],6表示星期天
%W:  周在當(dāng)年的周數(shù),星期一作為周的第一天
%x:  日期字符串(如:05/01/20)
%X:  時(shí)間字符串(如:09:00:20)
%y:  2個(gè)數(shù)字表示的年份
%Y:  4個(gè)數(shù)字表示的年份
%z:  與utc時(shí)間的間隔 (如果是本地時(shí)間,返回空字符串)
%Z:  時(shí)區(qū)名稱(如果是本地時(shí)間,返回空字符串)

小結(jié)

到此這篇關(guān)于python如何將字符串轉(zhuǎn)成日期的文章就介紹到這了,更多相關(guān)python學(xué)習(xí)內(nèi)容請(qǐng)搜索W3Cschool以前的文章或繼續(xù)瀏覽下面的相關(guān)文章。希望大家以后多多支持W3Cschool!


1 人點(diǎn)贊