将 unix 时间戳从纪元转换为数据帧中的日期

Convert unix time stamp since epoch to date in dataframe

我正在从 API 中提取财务数据并尝试将其放入可读的数据框中。然而,日期是以某种 ISO 8601 格式编码的,我无法分辨它们是什么。在 Whosebug 上尝试了很多不同的东西,但我无法弄清楚。帮助将不胜感激。日期应该在第 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] 从数字更改为 [time, low, high, open, close, volume] .

谢谢!

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

你的时代不是https://en.wikipedia.org/wiki/ISO_8601

您可以在创建数据框时提供 header 并对您的时间列应用转换:

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://whosebug.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

肯定不是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