First 2018-02-28 01:00:00
is 2018-02-28T01:00:00.000000000
as represenation of datetime64[ns]
.
Under the hood datetimes are long integers as nanoseconds
since epoch called unix time
:
c = a.values.astype(np.int64)
print (c)
[1519779600000000000 1519779660000000000 1519779720000000000
1519779780000000000 1519779840000000000 1519779900000000000
1519779960000000000 1519780020000000000 1519780080000000000
1519780140000000000 1519838700000000000 1519838760000000000
1519838820000000000 1519838880000000000 1519838940000000000
1519839000000000000 1519839060000000000 1519839120000000000
1519839180000000000 1519839240000000000]
You can also check this for more info.
If want string
s:
b = df.index.astype(str).values
Or:
b = df.index.strftime('%Y-%m-%d %H:%M:%S')
print (b)
['2018-02-28 01:00:00' '2018-02-28 01:01:00' '2018-02-28 01:02:00'
'2018-02-28 01:03:00' '2018-02-28 01:04:00' '2018-02-28 01:05:00'
'2018-02-28 01:06:00' '2018-02-28 01:07:00' '2018-02-28 01:08:00'
'2018-02-28 01:09:00' '2018-02-28 17:25:00' '2018-02-28 17:26:00'
'2018-02-28 17:27:00' '2018-02-28 17:28:00' '2018-02-28 17:29:00'
'2018-02-28 17:30:00' '2018-02-28 17:31:00' '2018-02-28 17:32:00'
'2018-02-28 17:33:00' '2018-02-28 17:34:00']
Another way is cast to second
precision with floor if exist ms
, us
, ns
.
b = df.index.values.astype('datetime64[s]')
print (b)
['2018-02-28T01:00:00' '2018-02-28T01:01:00' '2018-02-28T01:02:00'
'2018-02-28T01:03:00' '2018-02-28T01:04:00' '2018-02-28T01:05:00'
'2018-02-28T01:06:00' '2018-02-28T01:07:00' '2018-02-28T01:08:00'
'2018-02-28T01:09:00' '2018-02-28T17:25:00' '2018-02-28T17:26:00'
'2018-02-28T17:27:00' '2018-02-28T17:28:00' '2018-02-28T17:29:00'
'2018-02-28T17:30:00' '2018-02-28T17:31:00' '2018-02-28T17:32:00'
'2018-02-28T17:33:00' '2018-02-28T17:34:00']
EDIT: As mentioned in comments, is not necessary converting, but it depends of requirement of keys:
i = pd.DatetimeIndex(['2018-02-28 01:00:00', '2018-02-28 01:01:00',
'2018-02-28 01:02:00', '2018-02-28 01:03:00',
'2018-02-28 01:04:00', '2018-02-28 01:05:00',
'2018-02-28 01:06:00', '2018-02-28 01:07:00',
'2018-02-28 01:08:00', '2018-02-28 01:09:00'])
df = pd.DataFrame(index=i)
print (df)
Empty DataFrame
Columns: []
Index: [2018-02-28 01:00:00, 2018-02-28 01:01:00, 2018-02-28 01:02:00,
2018-02-28 01:03:00, 2018-02-28 01:04:00, 2018-02-28 01:05:00,
2018-02-28 01:06:00, 2018-02-28 01:07:00, 2018-02-28 01:08:00,
2018-02-28 01:09:00]
Selecting by Timestamp
s:
d = dict(zip(df.index, np.arange(10)))
{Timestamp('2018-02-28 01:00:00'): 0, Timestamp('2018-02-28 01:01:00'): 1,
Timestamp('2018-02-28 01:02:00'): 2, Timestamp('2018-02-28 01:03:00'): 3,
Timestamp('2018-02-28 01:04:00'): 4, Timestamp('2018-02-28 01:05:00'): 5,
Timestamp('2018-02-28 01:06:00'): 6, Timestamp('2018-02-28 01:07:00'): 7,
Timestamp('2018-02-28 01:08:00'): 8, Timestamp('2018-02-28 01:09:00'): 9}
print (d[pd.Timestamp('2018-02-28 01:00:00')])
0
print (d[pd.to_datetime('2018-02-28 01:00:00')])
Selecting by strings, simpliest:
d1 = dict(zip(df.index.astype(str).values, np.arange(10)))
{'2018-02-28 01:00:00': 0, '2018-02-28 01:01:00': 1, '2018-02-28 01:02:00': 2,
'2018-02-28 01:03:00': 3, '2018-02-28 01:04:00': 4, '2018-02-28 01:05:00': 5,
'2018-02-28 01:06:00': 6, '2018-02-28 01:07:00': 7, '2018-02-28 01:08:00': 8,
'2018-02-28 01:09:00': 9}
d1 = dict(zip(df.index.strftime('%Y-%m-%d %H:%M:%S'), np.arange(10)))
{'2018-02-28 01:00:00': 0, '2018-02-28 01:01:00': 1, '2018-02-28 01:02:00': 2,
'2018-02-28 01:03:00': 3, '2018-02-28 01:04:00': 4, '2018-02-28 01:05:00': 5,
'2018-02-28 01:06:00': 6, '2018-02-28 01:07:00': 7, '2018-02-28 01:08:00': 8,
'2018-02-28 01:09:00': 9}
print (d1['2018-02-28 01:00:00'])
0
print (dict(zip(df.index.values.astype('datetime64[s]'), np.arange(10))))
{numpy.datetime64('2018-02-28T01:00:00'): 0,
numpy.datetime64('2018-02-28T01:01:00'): 1,
numpy.datetime64('2018-02-28T01:02:00'): 2,
numpy.datetime64('2018-02-28T01:03:00'): 3,
numpy.datetime64('2018-02-28T01:04:00'): 4,
numpy.datetime64('2018-02-28T01:05:00'): 5,
numpy.datetime64('2018-02-28T01:06:00'): 6,
numpy.datetime64('2018-02-28T01:07:00'): 7,
numpy.datetime64('2018-02-28T01:08:00'): 8,
numpy.datetime64('2018-02-28T01:09:00'): 9}