[英]calculate time elapsed timedelta from pandas datetime index
我有一個帶有datetimeindex的pandas數據幀。 我想創建一個包含已用時間的列。 我正在計算它:
startTime = df.index[0]
elapsed = df.index - startTime
結果:
TypeError Traceback (most recent call last)
<ipython-input-56-279fd541b1e2> in <module>()
----> 1 df.index - startTime
C:\Python27\lib\site-packages\pandas\tseries\index.pyc in __sub__(self, other)
612 return self.shift(-other)
613 else: # pragma: no cover
--> 614 raise TypeError(other)
615
616 def _add_delta(self, delta):
TypeError: 2014-07-14 14:47:57
奇怪的是,例如:
df.index[1] - startTime
收益:
datetime.timedelta(0, 1)
我認為這可能是因為它是一個datetimeindex而不是導致問題的普通系列。 然而,當我第一次使用df.index作為數據參數創建一個新系列然后嘗試減法時,我得到一大堆警告,說我隱式地投射了兩個不兼容的類型,並且它將來不會起作用:
timeStamps =pd.Series(data=df.index)
elapsed = timeStamps - timeStamps[0]
回報
C:\Python27\lib\site-packages\pandas\core\format.py:1851: DeprecationWarning: Implicitly casting between incompatible kinds. In a future numpy release, this will raise an error. Use casting="unsafe" if this is intentional.
elif format_short and x == 0:
雖然我確實使用后一種方法獲得了一系列正確的TimeDelta,但我不喜歡依賴已棄用的代碼。 是否有“正確”的方法來計算經過的時間?
這是我從以下網站獲取數據的csv文件:
Timestamp Bubbler_Temperature_Setpoint
14-7-2014 14:47:57 13.000000
14-7-2014 14:47:58 13.000000
14-7-2014 14:47:59 13.000000
14-7-2014 14:48:00 13.000000
14-7-2014 14:48:01 13.000000
14-7-2014 14:48:02 13.000000
14-7-2014 14:48:03 13.000000
14-7-2014 14:48:04 13.000000
14-7-2014 14:48:05 13.000000
我使用'read_csv'函數將其讀入數據幀:
df = pd.read_csv('test.csv',sep='\t',parse_dates='Timestamp',index_col='Timestamp')
我正在使用pandas版本0.13.1
你是這樣做的因素:
In [30]: ts = Series(13,date_range('20140714 14:47:57',periods=10,freq='s'))
In [31]: ts
Out[31]:
2014-07-14 14:47:57 13
2014-07-14 14:47:58 13
2014-07-14 14:47:59 13
2014-07-14 14:48:00 13
2014-07-14 14:48:01 13
2014-07-14 14:48:02 13
2014-07-14 14:48:03 13
2014-07-14 14:48:04 13
2014-07-14 14:48:05 13
2014-07-14 14:48:06 13
Freq: S, dtype: int64
# iirc this is available in 0.13.1 (if not, use ``Series(ts.index)``
In [32]: x = ts.index.to_series()
In [33]: x-x.iloc[0]
Out[33]:
2014-07-14 14:47:57 00:00:00
2014-07-14 14:47:58 00:00:01
2014-07-14 14:47:59 00:00:02
2014-07-14 14:48:00 00:00:03
2014-07-14 14:48:01 00:00:04
2014-07-14 14:48:02 00:00:05
2014-07-14 14:48:03 00:00:06
2014-07-14 14:48:04 00:00:07
2014-07-14 14:48:05 00:00:08
2014-07-14 14:48:06 00:00:09
Freq: S, dtype: timedelta64[ns]
在您的示例中執行df.index-df.index[0]
不是timedelta操作,而是SET操作。 看到這里
我改變了
elapsed = df.index - startTime
至
df['elapsed'] = df.index - startTime
獲取時間更改列。 這不就是你需要的嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.