【发布时间】:2017-12-27 14:20:49
【问题描述】:
您好,我有这个数据框:
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')
我得到了准确的日期。
我做错了什么?
【问题讨论】:
-
我无法复制您的问题。你用的是什么版本的 Pandas?
-
0.21.1 它适合你吗?
-
这是
inplace与copy的问题。您需要将df.set_index('TimeStamp')分配给df。基本上,df = df.set_index('TimeStamp')或使用inplace:df.set_index('TimeStamp', inplace=True)。否则,您会将range(len(df))转换为日期时间对象。 -
哦,是的...您的第二个语句 set_index 必须重新分配为 Abdou。
df = df.set_index('TimeStamp'). -
现在可以使用了!就用这个! df = df.set_index('TimeStamp') df.set 只返回一个 len.. 谢谢大家!
标签: python pandas datetime dataframe data-analysis