裏面一個數據幀,其來自datetimes
/Timestamps
/DatetimeIndex
/datetime64
的被內部存儲在D型細胞datetime64[ns]
的NumPy的數組值的列中。
若要添加或減去表示秒的整數列,請將整數轉換爲dtype的NumPy數組。然後,您可以執行NumPy的datetime64/timedelta64 arithmetic:
import numpy as np
import pandas as pd
np.random.seed(2015)
N = 10
frame = pd.DataFrame({'eventdatetime':pd.date_range('2000-1-1', periods=N, freq='T'),
'seconds': np.random.randint(60, size=N)})
frame.loc[::2, 'seconds'] = np.nan
frame["s_eventdatetime"] = (
frame["eventdatetime"] - np.array(frame['seconds'].fillna(0), dtype='timedelta64[s]'))
產生
eventdatetime seconds s_eventdatetime
0 2000-01-01 00:00:00 NaN 2000-01-01 00:00:00
1 2000-01-01 00:01:00 12 2000-01-01 00:00:48
2 2000-01-01 00:02:00 NaN 2000-01-01 00:02:00
3 2000-01-01 00:03:00 9 2000-01-01 00:02:51
4 2000-01-01 00:04:00 NaN 2000-01-01 00:04:00
5 2000-01-01 00:05:00 8 2000-01-01 00:04:52
6 2000-01-01 00:06:00 NaN 2000-01-01 00:06:00
7 2000-01-01 00:07:00 26 2000-01-01 00:06:34
8 2000-01-01 00:08:00 NaN 2000-01-01 00:08:00
9 2000-01-01 00:09:00 59 2000-01-01 00:08:01
您還可以添加的timedelta64[s]
小號與NumPy陣列大熊貓DatetimeIndex的:
x = pd.date_range('2000-1-1', periods=N, freq='T')
x - np.array(frame['seconds'], dtype='timedelta64[s]')
產量
In [23]: x
Out[23]:
DatetimeIndex(['2000-01-01 00:00:00', '2000-01-01 00:01:00',
'2000-01-01 00:02:00', '2000-01-01 00:03:00',
'2000-01-01 00:04:00', '2000-01-01 00:05:00',
'2000-01-01 00:06:00', '2000-01-01 00:07:00',
'2000-01-01 00:08:00', '2000-01-01 00:09:00'],
dtype='datetime64[ns]', freq='T', tz=None)
In [24]: x - np.array(frame['seconds'], dtype='timedelta64[s]')
Out[24]:
DatetimeIndex(['1999-12-31 23:59:26', '2000-01-01 00:00:48',
'2000-01-01 00:01:26', '2000-01-01 00:02:51',
'2000-01-01 00:03:38', '2000-01-01 00:04:52',
'2000-01-01 00:05:14', '2000-01-01 00:06:34',
'2000-01-01 00:07:47', '2000-01-01 00:08:01'],
dtype='datetime64[ns]', freq='T', tz=None)
這肯定會導致正確的方向。你有一個想法,我怎麼可以在該轉換中放棄NaN值? np.array(frame ['seconds']。dropna(),dtype ='timedelta64 [s]')似乎不是方式 – wishi
您是否希望將NaN視爲0秒?如果是這樣,你可以使用frame [「s_eventdatetime」] = frame [「eventdatetime」] - np.array(frame ['seconds']。fillna(0),dtype ='timedelta64 [s]')'。 – unutbu