Timedelta 表示時(shí)間差(或者時(shí)間增量),我們可以使用不同的時(shí)間單位來(lái)表示它,比如,天、小時(shí)、分、秒。時(shí)間差的最終的結(jié)果可以是正時(shí)間差,也可以是負(fù)時(shí)間差。
本節(jié)主要介紹創(chuàng)建 Timedelta (時(shí)間差)的方法以及與時(shí)間差相關(guān)的運(yùn)算法則。
通過(guò)傳遞字符串可以創(chuàng)建 Timedelta 對(duì)象,示例如下:
import pandas as pd
print(pd.Timedelta('5 days 8 hours 6 minutes 59 seconds'))
輸出結(jié)果:
5 days 08:06:59
通過(guò)傳遞整數(shù)值和unit參數(shù)也可以創(chuàng)建一個(gè) Timedelta 對(duì)象。
import pandas as pd
print(pd.Timedelta(19,unit='h'))
輸出結(jié)果:
0 days 19:00:00
數(shù)據(jù)偏移量
數(shù)據(jù)偏移量, 比如,周(weeks)、天(days)、小時(shí)(hours)、分鐘(minutes)、秒(milliseconds)、毫秒、微秒、納秒都可以使用。
import pandas as pd
print (pd.Timedelta(days=2,hours=6))
輸出結(jié)果:
2 days 06:00:00
您可以使用pd.to_timedelta()方法,將具有 timedelta 格式的值 (標(biāo)量、數(shù)組、列表或 Series)轉(zhuǎn)換為 Timedelta 類型。如果輸入是 Series,則返回 Series;如果輸入是標(biāo)量,則返回值也為標(biāo)量,其他情況輸出 TimedeltaIndex。示例如下:
import pandas as pd
print(pd.to_timedelta(['1 days 06:05:01.00003', '15.5us', 'nan']))
print(pd.to_timedelta(np.arange(5), unit='s'))
輸出結(jié)果:
TimedeltaIndex(['1 days 06:05:01.000030', '0 days 00:00:00.000015', 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)
通過(guò)對(duì)datetime64[ns]類型的時(shí)間序列或時(shí)間戳做算術(shù)運(yùn)算,其運(yùn)算結(jié)果依然是datetime64[ns]
數(shù)據(jù)類型。接下來(lái),我們創(chuàng)建一個(gè)帶有 Timedelta 與 datetime 的 DataFrame 對(duì)象,并對(duì)其做一些算術(shù)運(yùn)算。
import pandas as pd
s = pd.Series(pd.date_range('2020-1-1', periods=5, freq='D'))
#推導(dǎo)式用法
td = pd.Series([ pd.Timedelta(days=i) for i in range(5)])
df = pd.DataFrame(dict(A = s, B = td))
print(df)
輸出結(jié)果:
A B 0 2020-01-01 0 days 1 2020-01-02 1 days 2 2020-01-03 2 days 3 2020-01-04 3 days 4 2020-01-05 4 days
import pandas as pd
s = pd.Series(pd.date_range('20120-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
#加法運(yùn)算
df['C']=df['A']+df['B']
print(df)
輸出結(jié)果:
A B C 0 2020-01-01 0 days 2020-01-01 1 2020-01-02 1 days 2020-01-03 2 2020-01-03 2 days 2020-01-05
import pandas as pd
s = pd.Series(pd.date_range('2012-1-1', periods=3, freq='D'))
td = pd.Series([ pd.Timedelta(days=i) for i in range(3) ])
df = pd.DataFrame(dict(A = s, B = td))
df['C']=df['A']+df['B']
df['D']=df['C']-df['B']
print(df)
輸出結(jié)果:
A B C D 0 2019-01-01 0 days 2019-01-01 2019-01-01 1 2019-01-02 1 days 2019-01-03 2019-01-02 2 2019-01-03 2 days 2019-01-05 2019-01-03
更多建議: