假设我在熊猫有个时间戳记:
Timestamp('2014-08-07 11:01:02')
我想在一小时内得到多少毫秒。如何在熊猫中做到这一点?
在上面的示例中,我将寻找以下之间的毫秒差:
Timestamp('2014-08-07 11:01:02')
Timestamp('2014-08-07 11:00:00')
如果我有一系列像下面这样的时间戳记,该怎么办?
timestamp
1071 2014-08-07 11:01:02
3291 2014-08-07 11:01:00
3355 2014-08-07 05:01:00
3518 2014-08-07 05:01:03
4207 2014-08-07 13:01:03
5039 2014-08-07 18:01:04
5063 2014-08-07 23:01:03
6926 2014-08-07 06:01:02
6965 2014-08-07 06:01:02
7107 2014-08-07 05:01:01
Name: events_source_timestamp, dtype: datetime64[ns]
尝试@Jeff的答案。以下作品:
In [210]: temp_df = m*(df.astype('i8')/m).astype('i8')
Out[210]:
A_timestamp B_timestamp
1 1407405600000000000 1407405600000000000
2 1407445200000000000 1407445200000000000
3 1407434400000000000 1407434400000000000
4 1407445200000000000 1407445200000000000
5 1407438000000000000 1407438000000000000
6 1407402000000000000 1407402000000000000
7 1407420000000000000 1407420000000000000
8 1407438000000000000 1407438000000000000
9 1407438000000000000 1407438000000000000
10 1407420000000000000 1407420000000000000
11 1407420000000000000 1407420000000000000
12 1407441600000000000 1407441600000000000
13 1407409200000000000 1407409200000000000
14 1407391200000000000 1407391200000000000
15 1407409200000000000 1407409200000000000
16 1407420000000000000 1407420000000000000
但是之后
pd.DatetimeIndex(temp_df)
失败与:
/Users/josh/anaconda/envs/py3k/lib/python3.3/site-packages/pandas/tseries/tools.py in parse_time_string(arg, freq, dayfirst, yearfirst)
472 except Exception as e:
473 # TODO: allow raise of errors within instead
--> 474 raise DateParseError(e)
475
476 if parsed is None:
DateParseError: unknown string format
您可以简单地做到这一点,如果index
是DatetimeIndex
:
hour_as_integer = int(np.timedelta64(1, 'h') / np.timedelta64(1, 'ns'))
ms_as_integer = int(np.timedelta64(1, 'ms') / np.timedelta64(1, 'ns'))
ts.asi8 % hour_as_integer // ms_as_integer
该属性asi8
将索引转换为其内部表示形式,即微秒unix时间戳的64位整数。然后,将剩余的除以10 ** 6 * 3600
(一个小时,以微秒为单位),结果除以10 ** 3
得到毫秒。
对于单个pd.Timestamp
对象,您可以使用
ts.asm8.astype("int64") % hour_as_integer // ms_as_integer
对于一个Series
你可以做
series.astype("int64") % hour_as_integer // ms_as_integer
最后那一个我得到
1071 62000 3291 60000 3355 60000 3518 63000 4207 63000 5039 64000 5063 63000 6926 62000 6965 62000 7107 61000 名称:events_source_timestamp,dtype:int64
为您的数据。
但是请注意,如果您使用非整数的时区偏移量,那么所有这些都会失败。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句