2017-12-27 505 views
0

你好,我有这样的数据帧:日期时间Unix向ISO大熊猫

TimeStamp  low  high  open  close  volume 
0 1514331900 15699.54 15800.00 15699.55 15790.88 62.675508 
1 1514331000 15651.57 15745.80 15662.01 15699.54 83.040542 
2 1514330100 15661.00 15820.01 15820.01 15662.00 67.716571 
3 1514329200 15780.00 15856.00 15780.01 15820.00 41.608696 
4 1514328300 15780.00 15867.01 15789.98 15780.00 50.103055 
5 1514327400 15719.00 15856.99 15856.99 15789.99 120.660673 

我设置时间戳指数

df.set_index('TimeStamp') 

我得到

    low  high  open  close  volume 
TimeStamp              
1514331900 15699.54 15800.00 15699.55 15790.88 62.675508 
1514331000 15651.57 15745.80 15662.01 15699.54 83.040542 
1514330100 15661.00 15820.01 15820.01 15662.00 67.716571 
1514329200 15780.00 15856.00 15780.01 15820.00 41.608696 
1514328300 15780.00 15867.01 15789.98 15780.00 50.103055 

现在我想的时间戳转换为ISO可读的DateTime。 所以我用熊猫库

df.index = pd.to_datetime(df.index, unit='s') 

但我没有得到预期的日期时间,我得到这个:

     TimeStamp  low  high  open  close \ 
1970-01-01 00:00:00 1514331900 15699.54 15800.00 15699.55 15790.88 
1970-01-01 00:00:01 1514331000 15651.57 15745.80 15662.01 15699.54 
1970-01-01 00:00:02 1514330100 15661.00 15820.01 15820.01 15662.00 
1970-01-01 00:00:03 1514329200 15780.00 15856.00 15780.01 15820.00 
1970-01-01 00:00:04 1514328300 15780.00 15867.01 15789.98 15780.00 

这不是正确的形式,因为如果我这样做:

>>> pd.to_datetime(1514331900, unit='s') 
Timestamp('2017-12-26 23:45:00') 

我得到准确的日期。

我在做什么错?

+0

我不能d重复你的问题。你使用的是什么版本的熊猫? –

+0

0.21.1 它适合你吗? – hopieman

+3

这是一个'inplace'与'copy'问题。您需要将'df.set_index('TimeStamp')'分配给'df'。基本上,'df = df.set_index('TimeStamp')'或使用'inplace':'df.set_index('TimeStamp',inplace = True)''。否则,你将'range(len(df))'转换为datetime对象。 – Abdou

回答

0

问题解决。

功能

df.set_index('TimeStamp') 

真正改变它需要像做数据框:

df = df.set_index('TimeStamp') 

df.set_index('TimeStamp', inplace=True) 

否则我们只是转换LEN