转列表时保留datetime64的原始格式
Retain original format of datetime64 when converting to list
>>>df = pd.DataFrame(index=pd.date_range(DT.datetime(2016,8,1), DT.datetime(2016,8,9)), columns=['a','b'] )
>>>df.index
DatetimeIndex(['2016-08-01', '2016-08-02', '2016-08-03', '2016-08-04',
'2016-08-05', '2016-08-06', '2016-08-07', '2016-08-08',
'2016-08-09'],
dtype='datetime64[ns]', freq='D', tz=None)
>>>df.index.values.tolist()
[1470009600000000000L,
1470096000000000000L,
1470182400000000000L,
1470268800000000000L,
1470355200000000000L,
1470441600000000000L,
1470528000000000000L,
1470614400000000000L,
1470700800000000000L]
基本上datetime64[ns]格式会自动转换成long格式。有没有一种方法可以保留这些操作的格式,否则如果我想访问 df 内容,我需要将其转换回来。例如
>>>df.loc[df.index.values.tolist()[3]]
不起作用,而
>>>df.loc[df.index.values[3]]
有效。
您可以在将它们转换为列表时保留原始格式,方法是使用 pandas.DatetimeIndex.date
的 .date
,其中 returns 时间戳的日期部分。
In [14]: df.index.date.tolist()
Out[14]:
[datetime.date(2016, 8, 1),
datetime.date(2016, 8, 2),
datetime.date(2016, 8, 3),
datetime.date(2016, 8, 4),
datetime.date(2016, 8, 5),
datetime.date(2016, 8, 6),
datetime.date(2016, 8, 7),
datetime.date(2016, 8, 8),
datetime.date(2016, 8, 9)]
>>>df = pd.DataFrame(index=pd.date_range(DT.datetime(2016,8,1), DT.datetime(2016,8,9)), columns=['a','b'] )
>>>df.index
DatetimeIndex(['2016-08-01', '2016-08-02', '2016-08-03', '2016-08-04',
'2016-08-05', '2016-08-06', '2016-08-07', '2016-08-08',
'2016-08-09'],
dtype='datetime64[ns]', freq='D', tz=None)
>>>df.index.values.tolist()
[1470009600000000000L,
1470096000000000000L,
1470182400000000000L,
1470268800000000000L,
1470355200000000000L,
1470441600000000000L,
1470528000000000000L,
1470614400000000000L,
1470700800000000000L]
基本上datetime64[ns]格式会自动转换成long格式。有没有一种方法可以保留这些操作的格式,否则如果我想访问 df 内容,我需要将其转换回来。例如
>>>df.loc[df.index.values.tolist()[3]]
不起作用,而
>>>df.loc[df.index.values[3]]
有效。
您可以在将它们转换为列表时保留原始格式,方法是使用 pandas.DatetimeIndex.date
的 .date
,其中 returns 时间戳的日期部分。
In [14]: df.index.date.tolist()
Out[14]:
[datetime.date(2016, 8, 1),
datetime.date(2016, 8, 2),
datetime.date(2016, 8, 3),
datetime.date(2016, 8, 4),
datetime.date(2016, 8, 5),
datetime.date(2016, 8, 6),
datetime.date(2016, 8, 7),
datetime.date(2016, 8, 8),
datetime.date(2016, 8, 9)]