里面一个数据帧,其来自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