Python的'pd.to_datetime()'的Golang等价形式

ecbunoof  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(117)

我是Go语言的新手,希望创建我自己的算法交易策略回溯测试库,这是我在Python方面很有经验的一个领域,以帮助学习这门语言。
我有一个5分钟的OHLCV SPY5min.csv数据集,其头部如下所示:

我使用以下代码从文件中读入数据集,将所有内容转换为值列表:

package main

import (
    "encoding/csv"
    "log"
    "os"
    "fmt"
)

func ReadCsvFile(filePath string) [][]string {
    f, err := os.Open(filePath)
    if err != nil {
        log.Fatal("Unable to read input file "+filePath, err)
    }
    defer f.Close()

    csvReader := csv.NewReader(f)
    records, err := csvReader.ReadAll()
    if err != nil {
        log.Fatal("Unable to parse file as CSV for "+filePath, err)
    }

    return records
}

func main() {
    records := ReadCsvFile("./SPY5min.csv")
    fmt.Println(records)
}

这将返回一个字符串值的列表。很酷。现在我想做的是复制一个类似Pandas Dataframe的对象,或者如果更容易的话,将每个“列”分离到各自的数组/切片中,但还不确定。
完成后,我需要一种方法将datetime字符串转换为实际的datetime对象,以便运行比较和loc。有人能给我指出正确的方向吗?
我的天真方法(伪)会是:
1.声明大小为len(records)的6个数组变量(日期时间、打开、高、低、关闭、音量)
1.迭代列表的records列表
1.将每个值插入到其各自数组的当前i
1.迭代完成后,是否将datetime数组中的值批量转换为datetime对象的值?
想知道这是否真的是最好的方法,或者是否有比O(n)迭代更快的方法?

w51jfk4q

w51jfk4q1#

您问:“完成后,我需要一种方法将datetime字符串转换为实际的datetime对象......"我最近在这里回答了一个类似的问题:https://stackoverflow.com/a/74491722/5739452
您的时间戳如下所示:"2022-11-08 4:00"time包包含解析和其他操作函数。关键细节是了解布局解析器格式的约定。时间的每个元素都被识别为一个特定的数字。年为2006,月为01,等等。
因此,对于您的目的,应该可以使用以下内容:

package main

import (
    "fmt"
    "time"
)

func main() {
    t := "2022-11-08 4:00"
    const layout = "2006-01-02 15:04"
    x, err := time.Parse(layout, t)
    fmt.Println(x, err)
}

相关问题