我有一个数据帧,我想将其转换为numpy数组。
>>> df.index
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',
...
'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'],
dtype='datetime64[ns]', name='date', length=995, freq='T')
但是,如果我只是尝试转换它,格式会发生变化。
>>> np.array( ohlc.index )
array(['2018-02-28T01:00:00.000000000', '2018-02-28T01:01:00.000000000',
'2018-02-28T01:02:00.000000000', '2018-02-28T01:03:00.000000000',
'2018-02-28T01:04:00.000000000', '2018-02-28T01:05:00.000000000',
...
'2018-02-28T17:30:00.000000000', '2018-02-28T17:31:00.000000000',
'2018-02-28T17:32:00.000000000', '2018-02-28T17:33:00.000000000',
'2018-02-28T17:34:00.000000000'], dtype='datetime64[ns]')
似乎2018-02-28 01:00:00
和2018-02-28T01:00:00.000000000
不一样。我该如何保留格式?
第一个qazxsw poi是qazxsw poi作为qazxsw poi的代表。
在引擎盖下,日期是2018-02-28 01:00:00
的长整数,因为时代称为2018-02-28T01:00:00.000000000
:
datetime64[ns]
您还可以查看nanoseconds
了解更多信息。
如果想要unix time
s:
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]
要么:
this
string
如果存在b = df.index.astype(str).values
,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']
,另一种方式是投射到second
精确与地板。
ms
编辑:如评论中所述,没有必要转换,但它取决于键的要求:
us
通过ns
s选择:
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']
按字符串选择,最简单:
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]
Timestamp
根据您提供的信息,您无需将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')])
对象转换为字符串。实际上,不需要进行类型转换。
在可能的情况下,保持数据,输入和输出的结构。字符串通常仅对I / O有用。
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}