55 pandas 时间差dt.Timedelta属性方法(详细)(tcy)

时间差dt.Timedelta 2019/1/17

dtTimedeltas时间上差异,以差异单位表示,例天,小时,分钟,秒。可正可负;大多数情况下可与datetime.timedelta互换

1.1函数: 

class pd.Timedelta(value, unit=None, **kwargs)# 时间差;持续时间 

1.2参数: 

value : Timedelta,timedelta,np.timedelta64,str或int
unit:str{'ns','us','ms','s','m','h','D'}#如value=int,则表示输入的单位。默认为'ns'
days, seconds, microseconds,milliseconds, minutes, hours, weeks : numeric正负值

1.3构造方法 :

# 实例1:value=str
pd.Timedelta(' 2 days 2 hours 15 minutes 30 seconds')# Timedelta('2 days 02:15:30')
pd.Timedelta('1 days 00:01:01') #Timedelta('1 days 00:01:01')
pd.Timedelta('-1 days 2 min 3us') #Timedelta('-2 days +23:57:59.999997')
pd.Timedelta('-1us') #Timedelta('-1 days +23:59:59.999999')

# 实例2:value=int,unit
pd.Timedelta(6,unit='h') # Timedelta('0 days 06:00:00')

# 实例3:like datetime.timedelta必须指定参数-指定日期的天,小时
pd.Timedelta(days=2,hours=4,microseconds=100,milliseconds=200)# Timedelta('2 days 04:00:00.200100')

# 实例4:from a datetime.timedelta/np.timedelta64
pd.Timedelta(datetime.timedelta(days=1, seconds=1))#Timedelta('1 days 00:00:01')
pd.Timedelta(np.timedelta64(1, 'ms')) #Timedelta('0 days 00:00:00.001000')

# 实例5:时间戳加减
pd.Timestamp('2019-1-17 9:36')-pd.Timestamp('2019-1-16 9:30') #Timedelta('1 days 00:06:00')
pd.Timedelta(pd.tseries.offsets.Day(2)) + pd.Timedelta( # 标量之间的操作
pd.tseries.offsets.Second(2)) + pd.Timedelta('00:00:00.000123')#Timedelta('2 days 00:00:02.000123')

# 实例6: a NaT
pd.Timedelta('nan')#NaT
pd.Timedelta('nat')# NaT

# 实例7:ISO 8601时间格式;P[n]Y[n]M[n]DT[n]H[n]M[n]S
pd.Timedelta('P0DT0H1M0S') #Timedelta('0 days 00:01:00')
pd.Timedelta('P0DT0H0M0.000000123S')#Timedelta('0 days 00:00:00.000000')

# 实例8:DateOffsets构造-Day, Hour, Minute, Second, Milli, Micro, Nano
pd.Timedelta(pd.tseries.offsets.Second(2))#Timedelta('0 days 00:00:02')

1.4.pd.to_timedelta 转换:

pd.to_timedelta
# 将标量,数组,列表或系列从公认的timedelta格式/值转换为Timedelta类型。
# 如果输入是Series,则构造Series,如果输入是标量,则构造标量,否则输出TimedeltaIndex

# 实例1:单个字符串解析为Timedelta:
pd.to_timedelta('1 days 06:05:01.00003')# Timedelta('1 days 06:05:01.000030')
pd.to_timedelta('15.5us') # Timedelta('0 days 00:00:00.000015')

# 实例2:列表/数组字符串:
pd.to_timedelta(['1 days 06:05:01.00003', '15.5us', 'nan'])
# TimedeltaIndex(['1 days 06:05:01.000030', '0 days 00:00:00.000015', NaT], dtype='timedelta64[ns]', freq=None)

# 实例3:[int]+unit单位:
pd.to_timedelta(np.arange(5), unit='d')
# TimedeltaIndex(['0 days', '1 days', '2 days', '3 days', '4 days'], dtype='timedelta64[ns]', freq=None)

2.属性 :

d = pd.Timedelta('2 days 30 min 40 sec 100 microseconds 200 milliseconds ')
# Timedelta('2 days 00:30:40.200100')

d.asm8 #返回numpy 64数组视图# numpy.timedelta64(174640200100000,'ns')
d.components#返回与NamedTuple类似的组件
# Components(days=2, hours=0, minutes=30, seconds=40, milliseconds=200, microseconds=100, nanoseconds=0)

d.freq#
d.is_populated#密集 True

pd.Timedelta.max # Timedelta('106751 days 23:47:16.854775') 时间限制
pd.Timedelta.min # Timedelta('-106752 days +00:12:43.145224')时间限制
d.max # Timedelta('106751 days 23:47:16.854775')
d.min # Timedelta('-106752 days +00:12:43.145224')

d.microseconds#微秒数# 200100
d.nanoseconds#返回纳秒数(n),# 0
d.resolution #返回最低分辨率的字符串# 'U'
d.seconds #秒数# 1840
(-d).seconds #84559
d.days #天数.# 2

d.value # 174640200100000
d.delta # 174640200100000#以纳秒(ns)为单位返回

3.方法 : 

方法 说明
d.ceil 根据指定的频率返回一个新的Timedelta
d.floor 根据指定的最低频率返回一个新的Timedelta
d.isoformat 将Timedelta格式转化为ISO 8601持续时间格式;
  P[n]Y[n]M[n]DT[n]H[n]M[n]S,其中[n]s由值替换.
d.round 将Timedelta四舍五入到指定的频率
d.to_pytimedelta 转datetime.timedelta;将失去纳秒分辨率
d.to_timedelta64 返回ns精度的numpy.timedelta64对象
d.total_seconds timedelta的总持续时间,以秒为单位(以ns精度计)
d.view 数组视图compat

方法实例 : 

d.ceil('2D') #Timedelta('4 days 00:00:00')
d.floor('2D') # Timedelta('2 days 00:00:00')
d.floor('min') #Timedelta('2 days 00:30:00')
d.isoformat() #'P2DT0H30M40.2001S'
d.round('1min')#Timedelta('2 days 00:31:00')
# Series.dt/DataFrame.dt能访问时间戳属性方法;时间差无此功能

4.备注pd.Timedelta.isoformat()时间格式ISO 8601

#将Timedelta格式化为ISO 8601持续时间
ISO 8601格式:
P [n] Y [n] M [n] DT [n] H [n] M [n] S,其中``[n]`s被替换为值
参阅:
https://en.wikipedia.org/wiki/ISO_8601
返回:格式化str

注意:
# 最长组件是天值可能大于365。
# 即使其值为0也始终包含每个组件。
# Pandas用纳秒级精度,最多可以有9位小数包含在秒组件中
# 从小数点后的秒组件中删除尾随0。
# 没有0个pad组件,是T5H 而不是T05H

实例: 

pd.Timedelta(days=6, minutes=50, seconds=3,milliseconds=10,
microseconds=10, nanoseconds=12).isoformat()#'P6DT0H50M3.010010012S'
pd.Timedelta(hours=1, seconds=10).isoformat() #'P0DT0H0M10S'
pd.Timedelta(hours=1, seconds=10).isoformat() #'P0DT0H0M10S'
pd.Timedelta(days=500.5).isoformat() #'P500DT12H0MS'

 

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/86522064
55