如何将Gota数据帧写入CSV?

时间:2018-10-24 20:50:56

标签: 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()
}

但是,我还没有找到任何代码示例来说明如何使用gota数据框。WriteCSV()函数写入CSV。在gota {{3} },没有写csv的示例,但是有从csv读取的示例。

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

以下内容无效

writer := csv.NewWriter(f)

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

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

我已经考虑将我的gota数据框转换为[] []字符串类型,但这有点不方便,因为我使用包的LoadStructs()函数将数据放入了gota数据框,并且我已经在将它们放入结构之前的半定制方式。

所以我可以编写一个函数来将结构转换为[] []字符串格式,但是我觉得那很繁琐,而且我相信必须有更好的方法。实际上,我敢肯定是因为数据框类型具有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”,并且一直在引用它。

1 个答案:

答案 0 :(得分:1)

因此,事实证明我误解了io.Writer接口,但我不明白os.Create()函数返回什么。

原来的代码比我想象的还要简单和容易。

这是工作代码示例:

df := dataframe.LoadStructs(file.Rows)

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

df.WriteCSV(f)