【问题标题】:Python Numpy Loadtxt - Convert unix timestampPython Numpy Loadtxt - 转换 unix 时间戳
【发布时间】:2015-09-29 02:25:42
【问题描述】:

我有一个包含多行数据的文本文件 - 每行中的第一条数据是一个 unix 时间戳,例如 1436472000。我正在使用numpy.loadtxt 并在我想指定的转换器参数中将时间戳转换为numpy 理解为日期时间的任何内容。我知道这需要在大括号中的0: 之后进行,但我不知道如何转换它。我知道可以从matplotlib.dates.strpdate2num 使用转换器来处理正常日期,但我这不适用于 unix 时间戳。

代码:

timestamp, closep, highp, lowp, openp, volume = np.loadtxt(fileName,delimiter=",",unpack=True,converters={ 0: })

提前感谢您的帮助,请询问您是否希望我澄清我的意思。

【问题讨论】:

    标签: python python-2.7 numpy matplotlib unix-timestamp


    【解决方案1】:

    虽然转换器很方便,但速度很慢,因为每行数据都会调用一次。将时间戳加载到 NumPy 整数数组后转换数据更快:

    x = np.array([1436472000, 1436472001])
    x = np.asarray(x, dtype='datetime64[s]')
    

    产生NumPy datetime64s的数组:

    array(['2015-07-09T16:00:00-0400', '2015-07-09T16:00:01-0400'],
           dtype='datetime64[s]')
    

    要获取 Python datetime.datetimes 使用 tolist():

    >>> x.tolist()
    # [datetime.datetime(2015, 7, 9, 20, 0), 
    #  datetime.datetime(2015, 7, 9, 20, 0, 1)]
    

    如您所知,matplotlib datenums 计算自 0001-01-01 以来的天数 00:00:00 UTC,加一。这些不是时间戳(自 时代,1970-01-01 00:00:00 UTC):

    >>> matplotlib.dates.date2num(x.tolist())
    # array([ 735788.83333333,  735788.83334491])
    

    【讨论】:

    • 天才!完美运行,正是我想要的 - 非常感谢。
    猜你喜欢
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多