目录
- 1 计算日期的年月日时分秒,星期,周次…
- 2计算一年中的第几天, 第几个10分钟, 日期转数值
- 3判断日期是否闰年,年初年末,月初月末…
- 4字符串时段,季节
- 5for循环快捷计算
- 6时间间隔天数计算
- 补充:Python日期获取今天及昨天的年月日等信息
- 总结
这次介绍日期数据处理。
用python中的方法对日期数据进行处理, 我们可以获取很多有用的信息, 比如年月日,星期,周次,季度等, 这里分享工作和数据竞赛30余种常用的转换方法。
1 计算日期的年月日时分秒,星期,周次…
用pandas的read_excel()方法读取excel表数据,将表格中"日期"列转日期格式
import pandas as pd import numpy as np import datetime df = pd.read_excel(\'./日期问题.xlsx\') # 将日期列转成日期格式 df[\'日期\'] = pd.to_datetime(df[\'日期\'])
dt模块可轻松获取日期基本属性
# 转年月日格式(字符串文本) df[\'年月日\'] = df[\'日期\'].apply(lambda x: x.strftime(\'%Y%m%d\')) df[\'年\']=df[\'日期\'].dt.year df[\'季度\']=df[\'日期\'].dt.quarter df[\'月\']=df[\'日期\'].dt.month df[\'日\']=df[\'日期\'].dt.day df[\'星期几\']=df[\'日期\'].dt.dayofweek df[\'周次\']=df[\'日期\'].dt.week df[\'时\']=df[\'日期\'].dt.hour df[\'分\']=df[\'日期\'].dt.minute df[\'秒\']=df[\'日期\'].dt.second
2计算一年中的第几天, 第几个10分钟, 日期转数值
通过对天, 时,分的四则运算将日期转为序列数值数据
df[\'一年中的第几天\']=df[\'日期\'].dt.dayofyear df[\'一天中的第几分钟\']=df[\'日期\'].apply(lambda x: x.minute + x.hour*60) df[\'一天中的第几个10分钟\'] = df[\'时\'] * 6 + df[\'分\'] // 10 df[\'数值\'] = df[\"日期\"].values.astype(np.int64) // 10 ** 9 # 转年月(数值) df[\'年月\'] = df[\'日期\'].dt.year * 100 + df[\'日期\'].dt.month
3判断日期是否闰年,年初年末,月初月末…
apply() 和lambda()方法使用. python中2个强大的高阶函数.
df[\'是否闰年\'] = df[\'日期\'].apply(lambda x: x.is_leap_year) # 是否闰年 df[\'是否月初\'] = df[\'日期\'].apply(lambda x: x.is_month_start) # 是否月初 df[\'是否月末\'] = df[\'日期\'].apply(lambda x: x.is_month_end) # 月末 df[\'是否季节初\'] = df[\'日期\'].apply(lambda x: x.is_quarter_start) # 季度初 df[\'是否季节末\'] = df[\'日期\'].apply(lambda x: x.is_quarter_end) # 季度末 df[\'是否年初\'] = df[\'日期\'].apply(lambda x: x.is_year_start) # 年初 df[\'是否年尾\'] = df[\'日期\'].apply(lambda x: x.is_year_end) # 年内末 df[\'是否周末\'] = df[\'日期\'].apply(lambda x: True if x.dayofweek in [5, 6] else False) # 是否周末 df.loc[((df[\'时\'] >= 8) & (df[\'时\'] < 22)), \'是否营业时间\'] = True
4字符串时段,季节
构造字典, 用map方法进行替换.
period_dict ={ 23: \'深夜\', 0: \'深夜\', 1: \'深夜\', 2: \'凌晨\', 3: \'凌晨\', 4: \'凌晨\', 5: \'早晨\', 6: \'早晨\', 7: \'早晨\', 8: \'上午\', 9: \'上午\', 10: \'上午\', 11: \'上午\', 12: \'中午\', 13: \'中午\', 14: \'下午\', 15: \'下午\', 16: \'下午\', 17: \'下午\', 18: \'傍晚\', 19: \'晚上\', 20: \'晚上\', 21: \'晚上\', 22: \'晚上\', } df[\'时间段\']=df[\'时\'].map(period_dict) # 一年中的哪个季度 season_dict = { 1: \'春季\', 2: \'春季\', 3: \'春季\', 4: \'夏季\', 5: \'夏季\', 6: \'夏季\', 7: \'秋季\', 8: \'秋季\', 9: \'秋季\', 10: \'冬季\', 11: \'冬季\', 12: \'冬季\', } df[\'季节\']=df[\'月\'].map(season_dict)
5for循环快捷计算
python中的getattr()方法
time_features = [\'year\', \'month\', \'quarter\', \'week\', \'day\', \'dayofweek\', \'dayofyear\'] dtype = np.int16 for time_feature in time_features: df[time_feature] = getattr(df[\'日期\'].dt, time_feature).astype(dtype)
6时间间隔天数计算
日期与一指定日期或者今天日期相比, 计算间隔天数
# 设置初始的时间 base_time = datetime.datetime.strptime(\'2021-06-01\', \'%Y-%m-%d\') # 计算时间差 df[\'时间差\'] = df[\'日期\'].apply(lambda x: x-base_time).dt.days # 距离今天天数 df[\'间隔天数\'] = list(map(lambda x: x.days, pd.to_datetime(\'today\') - df[\'日期\']))
补充:Python日期获取今天及昨天的年月日等信息
import time from datetime import datetime, date, timedelta # 当前日期 now_date = time.strftime(\"%Y-%m-%d %H:%M:%S\", time.localtime()) print(\"now_date: {}\".format(now_date)) # 当前时间的年月日 year = datetime.now().year month = datetime.now().month day = datetime.now().day print(f\"year: {year}, month: {month}, day: {day}\") # 昨天 month_yesterday = (date.today() + timedelta(days=-1)).month day_yesterday = (date.today() + timedelta(days=-1)).day print(f\"month_yesterday: {month_yesterday}, day_yesterday: {day_yesterday}\")
输出结果:
now_date: 2022-06-01 11:22:11
year: 2022, month: 6, day: 1
month_yesterday: 5, day_yesterday: 31
总结
© 版权声明
THE END
暂无评论内容