如何将 gota 数据框写入 csv?

Jon*_*ele 1 go gota

我发现了很多通过传入 [][] 字符串写入 CSV 的代码示例。(如下所示):

package main

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

var data = [][]string{
    {"Row 1", "30"}, 
    {"Row 2", "60"},
    {"Row 3", "90"}}

func main() {
    file, err := os.Create("tutorials_technology.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    w := csv.NewWriter(file) 

    for _, value := range data {
        if err := w.Write(value); err != nil {
            log.Fatalln("Error writing record to csv: ", err)
        }
    }
    w.Flush()
}
Run Code Online (Sandbox Code Playgroud)

但是,我还没有找到任何代码示例来说明如何使用gota dataframe.WriteCSV() 函数写入 CSV。在 gota dataframe 文档中,没有写入 csv 的示例,但有一个从 csv 读取的示例。

数据帧函数 WriteCSV() 需要 io.Writer{} 接口的输入。我不知道如何满足这一点。

以下无效

writer := csv.NewWriter(f)

df.WriteCSV(writer) // TODO This writer needs to be a []byte writer
Run Code Online (Sandbox Code Playgroud)

我已经为此工作了很长一段时间。有人有任何线索吗?

我已经考虑过将我的 gota 数据帧转换为 [][]string 类型,但这有点不方便,因为我使用包的 LoadStructs() 函数将我的数据放入 gota 数据帧中,并且我已经在半自定义中读取了一些 CSV在将它们放入结构之前的方式。

所以我可以编写一个函数将我的结构转换为 [][]string 格式,但我觉得这非常乏味,我确信必须有更好的方法。事实上,我确信存在,因为数据帧类型具有 WriteCSV() 方法,但我只是不知道如何使用它。

这是我的结构

type CsvLine struct {
    Index  int
    Date   string
    Symbol string
    Open   float64
    High   float64
    Low    float64
    Close  float64
    // Volume float64
    // Market_Cap float64
}

type File struct {
    Rows []CsvLine
}
Run Code Online (Sandbox Code Playgroud)

免责声明:我是一个 golang 新手。我只使用 Go 几个月,这是我第一次尝试写入文件。我没有与 io.Writer 接口进行太多交互,但我听说它非常有用。

是的,我经常查看 Golang.org 博客,我读过“Effective Go”并且不断引用它。

Jon*_*ele 5

所以事实证明我误解了 io.Writer 接口,并且我不明白 os.Create() 函数返回什么。

事实证明,代码比我想象的更简单、更容易。

这是工作代码示例:

df := dataframe.LoadStructs(file.Rows)

f, err := os.Create(outFileName)
if err != nil {
    log.Fatal(err)
}

df.WriteCSV(f)
Run Code Online (Sandbox Code Playgroud)