以下是帶有datetime64 [ns]列的pandas數據框。將pandas.Timedelta添加到datetime64系列或DataFrame中的列
In [69]: dataframe_with_datetime
some_other_column ts
0 0 2017-09-22 23:29:11
In [70]: dataframe_with_datetime.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 2 columns):
some_other_column 1 non-null int64
ts 1 non-null datetime64[ns]
dtypes: datetime64[ns](1), int64(1)
memory usage: 96.0 bytes
In [72]: import datetime
In [73]: offset = datetime.timedelta(hours=5, minutes=30)
Out[74]: datetime.timedelta(0, 19800)
In [75]: delta = pd.Timedelta(offset)
Out[76]: Timedelta('0 days 05:30:00')
In [77]: dataframe_with_datetime['ts']
0 2017-09-22 23:29:11
Name: ts, dtype: datetime64[ns]
鑑於這樣的熊貓數據幀,我需要添加/減去這個熊貓列的時間差,但我得到以下異常:
In [78]: dataframe_with_datetime['ts'] - delta
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-78-6d6985a3c867> in <module>()
----> 1 dts['ts'] - td
/usr/local/lib/python3.5/dist-packages/pandas/core/ops.py in wrapper(left, right, name, na_op)
694 left, right = _align_method_SERIES(left, right)
695
--> 696 converted = _Op.get_op(left, right, name, na_op)
697
698 left, right = converted.left, converted.right
/usr/local/lib/python3.5/dist-packages/pandas/core/ops.py in get_op(cls, left, right, name, na_op)
328 return _Op(left, right, name, na_op)
329 else:
--> 330 return _TimeOp(left, right, name, na_op)
331
332
/usr/local/lib/python3.5/dist-packages/pandas/core/ops.py in __init__(self, left, right, name, na_op)
341 super(_TimeOp, self).__init__(left, right, name, na_op)
342
--> 343 lvalues = self._convert_to_array(left, name=name)
344 rvalues = self._convert_to_array(right, name=name, other=lvalues)
345
/usr/local/lib/python3.5/dist-packages/pandas/core/ops.py in _convert_to_array(self, values, name, other)
452 supplied_dtype = values.dtype
453 inferred_type = supplied_dtype or lib.infer_dtype(values)
--> 454 if (inferred_type in ('datetime64', 'datetime', 'date', 'time') or
455 is_datetimetz(inferred_type)):
456 # if we have a other of timedelta, but use pd.NaT here we
TypeError: data type "datetime" not understood
嗯,對我來說''dataframe_with_datetime ['ts'] - delta'工作很好,也許老式版本的熊貓,numpy? – jezrael
指定你的熊貓和蟒蛇版本,如果你想這是一個有用的職位。 –
@cᴏʟᴅsᴘᴇᴇᴅ - 好主意,完成。謝謝 – jezrael