我正在尝试为Pandas DataFrame的DateTime索引添加一些秒。
为了做到这一点,我需要从另一列中减去这些值:
>>> frame["s_eventdatetime"] = frame["eventdatetime"].apply(lambda x: x - datetime.timedelta(seconds=frame["seconds"]))
TypeError: unsupported type for timedelta seconds component: Series
有人知道如何为相应的行值执行此操作,每行的值不同。没有恒定的价值。我认为这会失败,因为有些行有NaN条目。
答案 0 :(得分:1)
在DataFrame中,来自datetimes
/ Timestamps
/ DatetimeIndex
/ datetime64
的一列值内部存储在dtype {{的NumPy数组中1}}。
要添加或减去表示秒数的整数列,请将整数转换为datetime64[ns]
dtype的NumPy数组。然后,您可以执行NumPy datetime64/timedelta64 arithmetic:
timedelta64[s]
产量
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
的NumPy数组添加到Pandas DatetimeIndex:
timedelta64[s]
产量
x = pd.date_range('2000-1-1', periods=N, freq='T')
x - np.array(frame['seconds'], dtype='timedelta64[s]')