datetime时间数据的处理

https://www.pypandas.cn/docs/user_guide/timeseries.html

from datetime import date

获取今天日期

date.today()
datetime.date(2020, 6, 9)
day = date(year = 2020,month=8,day= 9)
day
datetime.date(2020, 8, 9)

当数据列为字符串格式,拆分年月日传给date

str1 = '20160809'
y = int(str1[0:4])
m =  int(str1[4:6])
d =  int(str1[6:8])
date(year = y,month=m,day = d)
datetime.date(2016, 8, 9)

可以进行比较

day_1<day
True
import pandas as pd
l = ['20160809','20160528','20170409','20160527']
l = pd.DataFrame(l)
l.columns = ['time']
l
time
0 20160809
1 20160528
2 20170409
3 20160527

字符串列转换为时间类型

a = pd.to_datetime(l['time'])
a
0   2016-08-09
1   2016-05-28
2   2017-04-09
3   2016-05-27
Name: time, dtype: datetime64[ns]

日期最大值

max(a)
Timestamp('2017-04-09 00:00:00')

日期最小值

min(a)
Timestamp('2016-05-27 00:00:00')

由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()

from datetime import datetime
str_1 = '2019:01:30'
str_2 = '2019/1/4 3:40:8'
str_3 = '20200508'
date_1 = datetime.strptime(str_1,'%Y:%m:%d').date()
date_2 = datetime.strptime(str_2,'%Y/%m/%d %H:%M:%S')
date_3 = datetime.strptime(str_3,'%Y%m%d').date()
print(date_1,type(date_1))
print(date_2,type(date_2))
print(date_3)
2019-01-30 
2019-01-04 03:40:08 
2020-05-08

由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()

print('%a 星期几的简写',date_2.strftime('%a'))
print('%A 星期几的全称',date_2.strftime('%A'))
print('%b 月份的简写',date_2.strftime('%b'))
print('%B 月份的全称',date_2.strftime('%B'))
print('%c 标准的日期的时间串',date_2.strftime('%c'))
print('%d 十进制表示的每月的第几天',date_2.strftime('%d'))
print('%H 24小时制的小时 Hour',date_2.strftime('%H'))
print('%I 12小时制的小时 Hour',date_2.strftime('%I'))
print('%j 十进制表示的每年的第几天',date_2.strftime('%j'))
print('%X 标准的时间串',date_2.strftime('%X'))
print('%x 标准的日期串',date_2.strftime('%x'))
print('%w 十进制表示的星期几',date_2.strftime('%w'))
%a 星期几的简写 Fri
%A 星期几的全称 Friday
%b 月份的简写 Jan
%B 月份的全称 January
%c 标准的日期的时间串 Fri Jan  4 03:40:08 2019
%d 十进制表示的每月的第几天 04
%H 24小时制的小时 Hour 03
%I 12小时制的小时 Hour 03
%j 十进制表示的每年的第几天 004
%X 标准的时间串 03:40:08
%x 标准的日期串 01/04/19
%w 十进制表示的星期几 5

%a 星期几的简写 Weekday name, abbr.
%A 星期几的全称 Weekday name, full
%b 月分的简写 Month name, abbr.
%B 月份的全称 Month name, full
%c 标准的日期的时间串 Complete date and time representation
%d 十进制表示的每月的第几天 Day of the month
%H 24小时制的小时 Hour (24-hour clock)
%I 12小时制的小时 Hour (12-hour clock)
%j 十进制表示的每年的第几天 Day of the year
%m 十进制表示的月份 Month number
%M 十时制表示的分钟数 Minute number
%S 十进制的秒数 Second number
%U 第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)
%w 十进制表示的星期几(值从0到6,星期天为0)weekday number
%W 每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)
%x 标准的日期串 Complete date representation (e.g. 13/01/08)
%X 标准的时间串 Complete time representation (e.g. 17:02:10)
%y 不带世纪的十进制年份(值从0到99)Year number within century
%Y 带世纪部分的十制年份 Year number
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。Name of time zone
%% 百分号

def trans(row):
    y = int(row[0:4])
    m =  int(row[4:6])
    d =  int(row[6:8])
    row = date(year = y,month=m,day = d)
    print(row)
    return row
l.time = l.time.apply(lambda x: trans(x))
year = l.time.apply(lambda x: x.strftime('%y'))
week = l.time.apply(lambda x: x.strftime('%w'))

datetime.timedelta表示时间间隔类,给一个时间点加上此类,即可得到一个新的时间。参数包含days、hours、minutes、seconds、microseconds

import datetime
datetime.timedelta(1, 3661, 10)

datetime.timedelta(days=1, seconds=3661, microseconds=10)

print(datetime.datetime.now()+datetime.timedelta(days=35)) 

当前时间35天后
2020-07-14 12:02:01.670834

print(datetime.datetime.now()-datetime.timedelta(days=35))

当前时间35天前
2020-05-05 13:38:22.091873

print(datetime.datetime.now()-datetime.timedelta(hours=10))

2020-06-09 03:38:40.842955

print(datetime.datetime.now()-datetime.timedelta(hours=10,days=1))

2020-06-08 03:37:50.283667

pd.date_range() 生成一个时间段
pd.bdate_range() 生成一个时间段,跟date_range()不同,可见下面代码
df.asfreq() 生成以一定时间间隔的序列

tm_rng = pd.date_range('20171231 12:50',periods=5,freq='M')
tm_rng
DatetimeIndex(['2017-12-31 12:50:00', '2018-01-31 12:50:00',
               '2018-02-28 12:50:00', '2018-03-31 12:50:00',
               '2018-04-30 12:50:00'],
              dtype='datetime64[ns]', freq='M')
#向前5天 
print(pd.bdate_range(end='20180101',periods=5,freq='D'))
DatetimeIndex(['2017-12-28', '2017-12-29', '2017-12-30', '2017-12-31',
               '2018-01-01'],
              dtype='datetime64[ns]', freq='D')
#向后5天 
print(pd.bdate_range(start='20180101',periods=5,freq='M'))
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
               '2018-05-31'],
              dtype='datetime64[ns]', freq='M')
data = pd.Series(['May 20, 2017']) 
data = pd.to_datetime(data)
import numpy as np
tm_rng = pd.date_range('2017-12-31 12:00:00',periods=20,freq='5H') 
tm_series = pd.Series(np.random.randn(len(tm_rng)), index=tm_rng) 
tm_series.asfreq('20D',method='backfill')
2017-12-31 12:00:00    2.044885
Freq: 20D, dtype: float64
tm_series.asfreq('100H')
2017-12-31 12:00:00    2.044885
Freq: 100H, dtype: float64
tm_series['2017-12-31']
2017-12-31 12:00:00    2.044885
2017-12-31 17:00:00   -0.093676
2017-12-31 22:00:00    0.716929
Freq: 5H, dtype: float64
np.random.randn(len(tm_rng))
array([-1.6155695 ,  0.53152483, -0.07345457, -0.92749088, -0.34137439,
        0.76227308, -1.20065839,  0.86265368,  1.24263623, -1.08166548,
       -0.10556186,  0.89598739,  0.55912525, -0.67228985,  1.70480491,
        1.95531251,  1.03890583, -0.06595028, -1.32885083, -1.24966029])
pd.Series(pd.period_range('1/1/2011', freq='D', periods=5))
0    2011-01-01
1    2011-01-02
2    2011-01-03
3    2011-01-04
4    2011-01-05
dtype: period[D]
pd.Series(pd.date_range('1/1/2011', freq='D', periods=3))
0   2011-01-01
1   2011-01-02
2   2011-01-03
dtype: datetime64[ns]

你可能感兴趣的:(datetime时间数据的处理)