python日期資料清洗 資料清洗之微博時間清洗

2021-10-17 01:42:08 字數 3547 閱讀 1555

資料清洗之微博時間清洗

爬取微博的時候時間格式比較亂,存到資料庫要統一成datatime型別,所以需要用到對時間的轉換

這裡是對time模組和datetime的模組的使用。

對於當天的有三種:

40秒前

50分鐘前

今天 08:12

針對這三種,第一步要做的是獲取當前的年月日

import datetime

now = datetime.datetime.now()

ymd = now.strftime("%y-%m-%d")

#或者#datetime.day,datetime.month,datetime.year 分別表示乙個datetime物件的日,月,年

解釋第一行我們匯入datetime模組

第二行獲取當前的時間,datetime型別:

2018-07-20 09:28:19.080791

包含年月日和時分秒

第三行,strftime函式是格式化字元裡面的引數是乙個輸出的字串格式:

比如這裡 的%y代表四個數字表示的年份(%y是二位的),%m是表示月份,%d返回的是當前時間是當前月的第幾天,其他的格式看下面的圖有詳細的解釋。

!(接上我們分析第乙個,

40秒前

第一步:獲取當前的時間

上面已經獲取now了。

第二步:減去40s

時間上的加減我們使用datetime的timedalte屬性,

timedalte 是datetime中的乙個物件,該物件表示兩個時間的差值。

timedalte 的建構函式如下:

def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,

milliseconds: float = ..., minutes: float = ..., hours: float = ...,

weeks: float = ...) -> none: ...

於是就有了下面的結果

newdate = now - datetime.timedelta(minutes=int(seconds[:-2]))

同理50分鐘前

newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))

然後說最後另一種:

今天 08:12

第一步:補齊年月日

第二步:使用time模組的strptime() 函式根據指定的格式把乙個時間字串解析為時間元組,

語法strptime()方法語法:

time.strptime(string[, format])

引數string -- 時間字串。

format -- 格式化字串。

返回值返回struct_time物件。

日期格式化符號:

%y 兩位數的年份表示(00-99)

%y 四位數的年份表示(000-9999)

%m 月份(01-12)

%d 月內中的一天(0-31)

%h 24小時制小時數(0-23)

%i 12小時制小時數(01-12)

%m 分鐘數(00=59)

%s 秒(00-59)

%a 本地簡化星期名稱

%a 本地完整星期名稱

%b 本地簡化的月份名稱

%b 本地完整的月份名稱

%c 本地相應的日期表示和時間表示

%j 年內的一天(001-366)

%p 本地a.m.或p.m.的等價符

%u 一年中的星期數(00-53)星期天為星期的開始

%w 星期(0-6),星期天為星期的開始

%w 一年中的星期數(00-53)星期一為星期的開始

%x 本地相應的日期表示

%x 本地相應的時間表示

%z 當前時區的名稱

%% %號本身

第三步:time.mktime轉換成時間戳

第四步:使用datetime的fromtimestamp模組,把時間戳轉換為

mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d今天 %h:%m'))

newdate = datetime.datetime.fromtimestamp(mdate)

其他的處理思路就一樣了,下面**給出目前遇到的格式:

def get_format_datetime(self,datestr):

now = datetime.datetime.now()

ymd = now.strftime("%y-%m-%d")

y = now.strftime("%y")

newstr = datestr

newdate = now

if u"樓" in datestr:

newstr = datestr.split(u"樓")[-1].strip()

if (u"今天" in newstr):

mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d今天 %h:%m'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"月" in newstr):

mdate = time.mktime(time.strptime(y + newstr, '%y%m月%d日 %h:%m'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"分鐘前" in newstr):

newdate = now - datetime.timedelta(minutes=int(newstr[:-3]))

elif (u"秒前" in newstr):

newdate = now - datetime.timedelta(minutes=int(newstr[:-2]))

#以下為手機端

elif "-" in newstr:

mdate = time.mktime(time.strptime(y+"-"+ newstr, '%y-%m-%d'))

newdate = datetime.datetime.fromtimestamp(mdate)

elif (u"昨天" in newstr):

mdate = time.mktime(time.strptime(ymd + newstr, '%y-%m-%d昨天 %h:%m'))

newdate = datetime.datetime.fromtimestamp(mdate)-datetime.timedelta(days=1)

elif (u"小時前" in newstr):

newdate = now - datetime.timedelta(hours=int(newstr[:-3]))

else:

newdate = datetime.datetime.strptime(newstr, "%y-%m-%d %h:%m")

return newdate

SQL語句獲得本年日期資料與本月日期資料

本年 select dateadd dd,number datename yy,getdate 0101 from master.spt values where type p andnumber datediff dd,datename yy,getdate 0101 datename yy,ge...

ORACLE插入日期資料

命令 insert into floor values to date 年 月 日 時 分 秒 yyyy mm dd hh24 mi ss 例子 在 sql plus 環境。當省略hh mi和ss對應的輸入引數時,oracle使用0作為default值。如果輸入的日期資料忽略時間部分,oracle會...

python時間日期資料處理

匯入相關庫 import pandas as pd import numpy as np import time import datetime import matplotlib.pyplot as plt 解決座標軸刻度負號亂碼 plt.rcparams axes.unicode minus f...