Как мне записать Gota DataFrame в CSV? - PullRequest
0 голосов
/ 24 октября 2018

Я нашел много примеров кода для записи в 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 () для записи вCSV. В документации gota dataframe нет примера для записи в csv, но есть пример для чтения из csv.

Функция фрейма данных WriteCSV () требует ввода интерфейса io.Writer {}.Я не был уверен, как это оценить.

Следующее не сработало

writer := csv.NewWriter(f)

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

Я работал над этим довольно давно.У кого-нибудь есть какие-либо подсказки?

Я пытался превратить мой gota dataframe в строковый тип [] [], но это немного неудобно, потому что я помещаю свои данные в gota dataframe с помощью функции LoadStructs () пакета.и я читал в некоторых 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
}

Отказ от ответственности: я немного новичок Голанга.Я использую Go только пару месяцев, и я впервые пытаюсь записать файл.Я мало взаимодействовал с интерфейсом io.Writer, но слышал, что он очень полезен.

И да, я часто заглядываю в блог Golang.org, читаю «Effective Go» и продолжаю ссылаться на него.

1 Ответ

0 голосов
/ 24 октября 2018

Оказывается, я неправильно понял интерфейс io.Writer и не понял, что возвращает функция os.Create ().

Оказывается, код еще проще и проще, чем я думал.

Вот пример рабочего кода:

df := dataframe.LoadStructs(file.Rows)

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

df.WriteCSV(f)
...