在数据帧中将自纪元以来的unix时间戳转换为日期

时间:2018-03-13 17:56:57

标签: python-3.x dataframe iso8601

我从API中提取财务数据并尝试将其放入可读的数据框中。但是,日期是以某种ISO 8601格式编码的,我无法说明它们是什么。在StackOverflow上尝试了很多不同的东西,但我无法弄明白。非常感谢帮助。日期应该在第0列。

data = get.foo()
df = pd.DataFrame(data)
print(df.tail())

              0       1       2       3       4           5
295  1520942700  174.10  174.62  174.33  174.50  169.447085
296  1520942640  174.23  174.46  174.23  174.46   25.634600
297  1520942580  173.56  174.60  173.56  174.52  298.726679
298  1520942520  173.50  174.11  174.11  173.55  672.756311
299  1520942460  174.11  174.81  174.80  174.11  441.636742

我也不确定如何将列顶部的[0,1,2,3,4,5]从数字更改为[时间,低,高,开,关,音量]

谢谢!

3 个答案:

答案 0 :(得分:2)

第0列具有UNIX时间戳,即1970年1月1日午夜以来的秒数,可能是UTC时区。见这里:Converting unix timestamp string to readable date in Python

答案 1 :(得分:1)

您的时间不是https://en.wikipedia.org/wiki/ISO_8601

您可以在创建数据框时提供标题,并将转换应用于时间列:

import pandas as pd
import datetime  

data = [[  1520942700, 174.10, 174.62, 174.33, 174.50, 169.447085],
        [  1520942640, 174.23, 174.46, 174.23, 174.46,  25.634600],
        [  1520942580, 173.56, 174.60, 173.56, 174.52, 298.726679],
        [  1520942520, 173.50, 174.11, 174.11, 173.55, 672.756311],
        [  1520942460, 174.11, 174.81, 174.80, 174.11, 441.636742]]

# create with headers    
df = pd.DataFrame(data,None, ['time', 'low', 'high', 'open', 'close', 'volume']) 

# convert to datetime (adapted from https://stackoverflow.com/a/26763810/7505395)
df['time'] = df['time'].apply(lambda x:datetime.datetime.fromtimestamp(x))  

print(df)

输出:

                 time     low    high    open   close      volume
0 2018-03-13 13:05:00  174.10  174.62  174.33  174.50  169.447085
1 2018-03-13 13:04:00  174.23  174.46  174.23  174.46   25.634600
2 2018-03-13 13:03:00  173.56  174.60  173.56  174.52  298.726679
3 2018-03-13 13:02:00  173.50  174.11  174.11  173.55  672.756311
4 2018-03-13 13:01:00  174.11  174.81  174.80  174.11  441.636742

答案 2 :(得分:1)

肯定不是ISO-8601。 我的猜测是:Unix Epoch格式(=自1970-01-01 00:00:00 UTC以来的秒数)。 这是我将其转换为可读格式时得到的结果:

$ date --date='@1520942700'
di 13 mrt 2018 13:05:00 CET

$ date --date='@1520942640'
di 13 mrt 2018 13:04:00 CET

$ date --date='@1520942580'
di 13 mrt 2018 13:03:00 CET

$ date --date='@1520942460'
di 13 mrt 2018 13:01:00 CET