使用带有时间戳的pandas to_datetime

时间:2016-02-10 10:43:23

标签: python datetime pandas

我试图将这些时间戳转换为%Y-%m-%d %H:%M格式。这是一个数据样本:

0    1450753200
1    1450756800
2    1450760400
3    1450764000
4    1450767600
Name: ohlcv_start_date, dtype: int64

有人可以解释这些时间戳的类型以及正确转换它们所需的代码,因为当我使用时:

pd.to_datetime(df[TS], unit='ms').dt.strftime('%Y-%m-%d %H:%M')

它将时间转换为:

0        1970-01-01 00:00
1        1970-01-01 00:00
2        1970-01-01 00:00
3        1970-01-01 00:00
4        1970-01-01 00:00

哪个不正确

编辑:谢谢Chum先生。

我实际上要做的是按时间戳合并不同资产的值。每个资产在稍微不同的时间开始和结束,经过分析,数据似乎存在差距:

 market_trading_pair  next_future_timestep_return ohlcv_start_date  \
0        Poloniex_ETH_BTC                 3.013303e-03    2015-12-22 03      
1        Poloniex_ETH_BTC                 3.171481e-03    2015-12-22 05   
2        Poloniex_ETH_BTC                -1.381575e-03    2015-12-22 07   
3        Poloniex_ETH_BTC                -4.327704e-03    2015-12-22 08   

我能想到的解决这个问题的最好方法是创建一个新的数据框并用时间戳增加一个小时来填充行,从这里我可以简单地合并资产数据。知道如何生成升序timstamps吗?

1 个答案:

答案 0 :(得分:9)

通过unit='s'获取值epoch time

In [106]:
pd.to_datetime(df['timestamp'], unit='s')
Out[106]:
index
0   2015-12-22 03:00:00
1   2015-12-22 04:00:00
2   2015-12-22 05:00:00
3   2015-12-22 06:00:00
4   2015-12-22 07:00:00
Name: timestamp, dtype: datetime64[ns]

如果您愿意,可以转换为字符串:

In [107]:

pd.to_datetime(df['timestamp'], unit='s').dt.strftime('%Y-%m-%d %H:%M')
Out[107]:
index
0    2015-12-22 03:00
1    2015-12-22 04:00
2    2015-12-22 05:00
3    2015-12-22 06:00
4    2015-12-22 07:00
Name: timestamp, dtype: object