如何将 gota 数据框写入 csv?

How do I write a gota dataframe to a csv?

我找到了许多通过传入 [][] 字符串写入 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()
}

但是,我还没有找到任何显示如何使用 gota dataframe.WriteCSV() function to write to a CSV. In the gota dataframe documentation 的代码示例,没有写入 csv 的示例,但是有一个示例从 csv 读取。

数据帧函数 WriteCSV() 需要 io.Writer{} 接口的输入。我不确定如何满足它。

以下无效

writer := csv.NewWriter(f)

df.WriteCSV(writer) // TODO This writer needs to be a []byte writer

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

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

所以我可以编写一个函数将我的结构转换为 [][] 字符串格式,但我觉得这很乏味,我确信必须有更好的方法。事实上,我确定有,因为数据帧类型有 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
}

免责声明:我是一个 golang 新手。我使用 Go 才几个月,这是我第一次尝试写入文件。 io.Writer 界面我接触的不多,但听说它很有用。

是的,我经常查看 Golang.org 博客,我读过 "Effective Go" 并一直引用它。

原来是我理解错了io.Writer接口,没看懂os.Create()函数是什么returns。

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

这是工作代码示例:

df := dataframe.LoadStructs(file.Rows)

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

df.WriteCSV(f)