教你用python从日期中获取年、月、日和星期等30种信息

目录

这次介绍日期数据处理。

用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[\'日期\'])   

教你用python从日期中获取年、月、日和星期等30种信息

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

教你用python从日期中获取年、月、日和星期等30种信息

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  

教你用python从日期中获取年、月、日和星期等30种信息

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

教你用python从日期中获取年、月、日和星期等30种信息

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)

教你用python从日期中获取年、月、日和星期等30种信息

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)

教你用python从日期中获取年、月、日和星期等30种信息

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从日期中获取年、月、日和星期等30种信息

补充: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
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容