Dataframe 如何封送、解组或转换对象,同时避免在golang中键入

Dataframe 如何封送、解组或转换对象,同时避免在golang中键入,dataframe,go,google-sheets-api,Dataframe,Go,Google Sheets Api,我正在编写将Google Sheets与dataframe sdk集成的代码:。此代码每次在“df:=dataframe.LoadRecords(values)”时都会导致死机。当我使用调试器时,它显示一种恐慌。watcher中的所有内容都完全按照预期显示my[][]字符串中的值。如果有更好的方法将表格单元格转换为[][]字符串,请发表评论 package main import ( "bitbucket.org/gosheets" "fmt" "github.com/

我正在编写将Google Sheets与dataframe sdk集成的代码:。此代码每次在“df:=dataframe.LoadRecords(values)”时都会导致死机。当我使用调试器时,它显示一种恐慌。watcher中的所有内容都完全按照预期显示my[][]字符串中的值。如果有更好的方法将表格单元格转换为[][]字符串,请发表评论

package main

import (
    "bitbucket.org/gosheets"
    "fmt"
    "github.com/kniren/gota/dataframe"
    "reflect"
)

func main() {
    sheetdata := gosheets.Setup()
    // row1 is column names
    fmt.Println(reflect.TypeOf(sheetdata.Values))
    values := [][]string{}
    //sheetdata.Values.(*sheets.ValueRange)
    fmt.Sprintln(sheetdata.Values)
    for _, row := range sheetdata.Values.Values {
        sr := []string{}
        for i, cell := range row {
            //capping columns at 5 for starters
            if i >= 5 {
                break
            }
            sr = append(sr, fmt.Sprint(cell))
        }
        fmt.Sprintln(row)
        values = append(values, sr)
        //values = append(values, fmt.Sprintln(row))
    }
    //opts := dataframe.LoadOption{detectTypes: false}
    df := dataframe.LoadRecords(values)

    //df := dataframe.ReadCSV(sheetdata.Values)
    //fmt.Println(sheetdata.Values)
    fmt.Println(df.Names())

}

尝试提供一个可运行的示例,因为它使调试更容易。这看起来像是使用了私有代码,但您应该能够在不使用gosheets库的情况下通过测试输入进行复制

因此,以sheetdata为例尝试此操作会产生恐慌:

sheetdata := [][]string{{"1", "2", "3", "4", "5"}, {"1", "2", "3"}}

因此,如果您的错误是:

panic: runtime error: index out of range

github.com/kniren/gota/dataframe.LoadRecords(0xc420058060, 0x2, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
github.com/kniren/gota/dataframe/dataframe.go:693 +0xc53

您的数据的标题字段可能比下面的行长(假设它正在查看csv数据)。这一假设已被证实,LoadRecords应该真正检查并返回一个错误,而不是死机。

什么是死机,包括堆栈跟踪?