【问题标题】:Convert unix time stamp since epoch to date in dataframe将自纪元以来的unix时间戳转换为数据框中的日期
【发布时间】:2018-03-14 02:42:54
【问题描述】:

我正在从 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] 从数字更改为 [time, low, high, open, close, volume]。

谢谢!

【问题讨论】:

标签: python-3.x dataframe iso8601


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你的时间不是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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-03
        • 2013-01-08
        • 2014-01-25
        • 2021-02-19
        • 1970-01-01
        • 2015-11-29
        • 2016-09-15
        相关资源
        最近更新 更多