Padans Timedelta时间差
Timedelta 表示时间差(或者时间增量),我们可以使用不同的时间单位来表示它,比如,天、小时、分、秒。时间差的最终的结果可以是正时间差,也可以是负时间差。
Timedelta类周期名、对应单位及其说明:
周期说明 | 单位 | 说明 |
---|---|---|
weeks | 无 | 星期 |
days | D | 天 |
hours | h | 小时 |
minutes | m | 分 |
seconds | s | 秒 |
milliseconds | ms | 毫秒 |
microseconds | μs | 微妙 |
naoseconds | ns | 纳秒 |
实例:
import pandas as pd
import numpy as np
empdata = pd.read_csv("C:\\Users\\qwy\\Desktop\\data\\empdata.csv")date_str =empdata.loc[:,'HIREDATE']for s in date_str:print(f"雇佣时间:{s},雇佣后的第二天:{pd.to_datetime(s)+pd.Timedelta(days=1)}")
雇佣时间:1980-12-17,雇佣后的第二天:1980-12-18 00:00:00
雇佣时间:1981-02-20,雇佣后的第二天:1981-02-21 00:00:00
雇佣时间:1981-02-22,雇佣后的第二天:1981-02-23 00:00:00
雇佣时间:1981-04-02,雇佣后的第二天:1981-04-03 00:00:00
雇佣时间:1981-09-28,雇佣后的第二天:1981-09-29 00:00:00
雇佣时间:1981-05-01,雇佣后的第二天:1981-05-02 00:00:00
雇佣时间:1981-06-09,雇佣后的第二天:1981-06-10 00:00:00
雇佣时间:1987-04-19,雇佣后的第二天:1987-04-20 00:00:00
雇佣时间:1981-11-17,雇佣后的第二天:1981-11-18 00:00:00
雇佣时间:1981-09-08,雇佣后的第二天:1981-09-09 00:00:00
雇佣时间:1987-05-23,雇佣后的第二天:1987-05-24 00:00:00
雇佣时间:1981-12-03,雇佣后的第二天:1981-12-04 00:00:00
雇佣时间:1981-12-03,雇佣后的第二天:1981-12-04 00:00:00
雇佣时间:1982-01-23,雇佣后的第二天:1982-01-24 00:00:00
字符串
通过传递字符串可以创建 Timedelta 对象,示例如下:
print(pd.Timedelta('5 days 8 hours 6 minutes 59 seconds'))
输出结果:
5 days 08:06:59
整数
通过传递整数值和unit
参数也可以创建一个 Timedelta 对象。
import pandas as pd
print(pd.Timedelta(19,unit='h'))
输出结果:
0 days 19:00:00
数据偏移量
数据偏移量, 比如,周(weeks)、天(days)、小时(hours)、分钟(minutes)、秒(milliseconds)、毫秒、微秒、纳秒都可以使用。
import pandas as pd
print (pd.Timedelta(days=2,hours=6))
输出结果:
2 days 06:00:00
to_timedelta()
您可以使用pd.to_timedelta()
方法,将具有 timedelta 格式的值 (标量、数组、列表或 Series)转换为 Timedelta 类型。如果输入是 Series,则返回 Series;如果输入是标量,则返回值也为标量,其他情况输出 TimedeltaIndex。示例如下:
import pandas as pd
import numpy as np
print(pd.to_timedelta(['1 days 06:05:01.00003', '15.5us', 'nan']))
print(pd.to_timedelta(np.arange(5), unit='s'))
输出结果:
TimedeltaIndex(['1 days 06:05:01.000030', '0 days 00:00:00.000015500', NaT], dtype='timedelta64[ns]', freq=None)
TimedeltaIndex(['0 days 00:00:00', '0 days 00:00:01', '0 days 00:00:02','0 days 00:00:03', '0 days 00:00:04'],dtype='timedelta64[ns]', freq=None)
算术操作
通过对datetime64[ns]
类型的时间序列或时间戳做算术运算,其运算结果依然是datetime64[ns]
数据类型。接下来,我们创建一个带有 Timedelta 与 datetime 的 DataFrame 对象,并对其做一些算术运算。
import pandas as pd
from datetime import datetime
empdata = pd.read_csv("C:\\Users\\qwy\\Desktop\\data\\empdata.csv")date_str =empdata.loc[:,'HIREDATE']for s in date_str:print(f"雇佣时间:{s},雇佣时间:{datetime.now()-pd.to_datetime(s)}")
输出结果:
雇佣时间:1980-12-17,雇佣时间:15903 days 22:33:24.413328
雇佣时间:1981-02-20,雇佣时间:15838 days 22:33:24.416003
雇佣时间:1981-02-22,雇佣时间:15836 days 22:33:24.417749
雇佣时间:1981-04-02,雇佣时间:15797 days 22:33:24.419878
雇佣时间:1981-09-28,雇佣时间:15618 days 22:33:24.420235
雇佣时间:1981-05-01,雇佣时间:15768 days 22:33:24.420235
雇佣时间:1981-06-09,雇佣时间:15729 days 22:33:24.420235
雇佣时间:1987-04-19,雇佣时间:13589 days 22:33:24.421580
雇佣时间:1981-11-17,雇佣时间:15568 days 22:33:24.421580
雇佣时间:1981-09-08,雇佣时间:15638 days 22:33:24.421580
雇佣时间:1987-05-23,雇佣时间:13555 days 22:33:24.421580
雇佣时间:1981-12-03,雇佣时间:15552 days 22:33:24.421580
雇佣时间:1981-12-03,雇佣时间:15552 days 22:33:24.422997
雇佣时间:1982-01-23,雇佣时间:15501 days 22:33:24.422997
加法运算
import pandas as pd
import numpy as np
empdata = pd.read_csv("C:\\Users\\qwy\\Desktop\\data\\empdata.csv")date_str =empdata.loc[:,'HIREDATE']for s in date_str:print(f"雇佣时间:{s},雇佣后的第二天:{pd.to_datetime(s)+pd.Timedelta(days=1)}")
输出结果:
雇佣时间:1980-12-17,雇佣后的第二天:1980-12-18 00:00:00
雇佣时间:1981-02-20,雇佣后的第二天:1981-02-21 00:00:00
雇佣时间:1981-02-22,雇佣后的第二天:1981-02-23 00:00:00
雇佣时间:1981-04-02,雇佣后的第二天:1981-04-03 00:00:00
雇佣时间:1981-09-28,雇佣后的第二天:1981-09-29 00:00:00
雇佣时间:1981-05-01,雇佣后的第二天:1981-05-02 00:00:00
雇佣时间:1981-06-09,雇佣后的第二天:1981-06-10 00:00:00
雇佣时间:1987-04-19,雇佣后的第二天:1987-04-20 00:00:00
雇佣时间:1981-11-17,雇佣后的第二天:1981-11-18 00:00:00
雇佣时间:1981-09-08,雇佣后的第二天:1981-09-09 00:00:00
雇佣时间:1987-05-23,雇佣后的第二天:1987-05-24 00:00:00
雇佣时间:1981-12-03,雇佣后的第二天:1981-12-04 00:00:00
雇佣时间:1981-12-03,雇佣后的第二天:1981-12-04 00:00:00
雇佣时间:1982-01-23,雇佣后的第二天:1982-01-24 00:00:00
减法运算
import pandas as pd
import numpy as np
empdata = pd.read_csv("C:\\Users\\qwy\\Desktop\\data\\empdata.csv")date_str =empdata.loc[:,'HIREDATE']for s in date_str:print(f"雇佣时间:{s},雇佣的前一天:{pd.to_datetime(s)-pd.Timedelta(days=1)}")
输出结果:
雇佣时间:1980-12-17,雇佣的前一天:1980-12-16 00:00:00
雇佣时间:1981-02-20,雇佣的前一天:1981-02-19 00:00:00
雇佣时间:1981-02-22,雇佣的前一天:1981-02-21 00:00:00
雇佣时间:1981-04-02,雇佣的前一天:1981-04-01 00:00:00
雇佣时间:1981-09-28,雇佣的前一天:1981-09-27 00:00:00
雇佣时间:1981-05-01,雇佣的前一天:1981-04-30 00:00:00
雇佣时间:1981-06-09,雇佣的前一天:1981-06-08 00:00:00
雇佣时间:1987-04-19,雇佣的前一天:1987-04-18 00:00:00
雇佣时间:1981-11-17,雇佣的前一天:1981-11-16 00:00:00
雇佣时间:1981-09-08,雇佣的前一天:1981-09-07 00:00:00
雇佣时间:1987-05-23,雇佣的前一天:1987-05-22 00:00:00
雇佣时间:1981-12-03,雇佣的前一天:1981-12-02 00:00:00
雇佣时间:1981-12-03,雇佣的前一天:1981-12-02 00:00:00
雇佣时间:1982-01-23,雇佣的前一天:1982-01-22 00:00:00