缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)
生活随笔
收集整理的這篇文章主要介紹了
缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有的時候做數據清洗的時候 ,?如果表中數據在某一天沒有記錄,但是業務要求不能有缺失日期,那么就需要我們將這些缺失日期補上。這個前提就是我們先要有一張包含所有日期的列表(作為左表),供我們進行匹配(left join)進而補上缺失日期。
Python代碼:
import datetimedef Date_interval_list(date_start = None,date_end = None):if date_start is None:date_start = '2000-01-01'if date_end is None:date_end = datetime.datetime.now().strftime('%Y-%m-%d')date_start=datetime.datetime.strptime(date_start,'%Y-%m-%d')date_end=datetime.datetime.strptime(date_end,'%Y-%m-%d')date_list = []date_list.append(date_start.strftime('%Y-%m-%d'))while date_start < date_end:date_start+=datetime.timedelta(days=+1)# 日期加一天date_list.append(date_start.strftime('%Y-%m-%d'))# 日期存入列表print(date_list)if __name__ == '__main__':Date_interval_list("2018-12-25", "2019-01-07")運行結果:
['2018-12-25', '2018-12-26', '2018-12-27', '2018-12-28', '2018-12-29', '2018-12-30', '2018-12-31', '2019-01-01','2019-01-02', '2019-01-03', '2019-01-04', '2019-01-05','2019-01-06', '2019-01-07']MySQL代碼:?
DELIMITER $$ DROP PROCEDURE IF EXISTS create_calendar $$ CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE) BEGINSET @createSql = 'CREATE TABLE IF NOT EXISTS calendar (`date` date NOT NULL,UNIQUE KEY `unique_date` (`date`) USING BTREE)ENGINE=InnoDB DEFAULT CHARSET=utf8'; prepare stmt from @createSql; execute stmt; WHILE s_date <= e_date DOINSERT IGNORE INTO calendar VALUES (DATE(s_date)) ;SET s_date = s_date + INTERVAL 1 DAY ;END WHILE ; END$$ DELIMITER ;CALL create_calendar ('2018-12-25', '2019-01-07');?運行結果:
MySQL的運行結果是直接生成一張表calendar,表中包含日期間隔里的所有日期date。
以前總覺得MySQL的作用很小,大概就是存儲數據 + 簡單清洗 + 數據統計?,以后要刮目相看了,就像刮目相看 Excel 一樣。
總結
以上是生活随笔為你收集整理的缺失值处理 - 获取一段时间内所有日期的列表 - (Python、MySQL)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑性不好可以学python吗_如果本文
- 下一篇: 模型评价 - 机器学习与建模中怎么克服过