我正在开发代码以将Google表格与数据框sdk集成:https://github.com/kniren/gota。此代码每次都会导致“df:= dataframe.LoadRecords(values)”出现混乱。当我使用调试器时,它显示出恐慌。观察者中的所有内容都在我的[] []字符串中显示完全符合预期的值。如果有更好的方法将sheet单元格转换为[] []字符串,请发表评论。
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())
}
答案 0 :(得分:0)
尝试提供一个可运行的示例,因为它使调试更容易。这看起来像是使用私有代码,但您应该能够在不使用gosheets lib的情况下使用测试输入进行重现。
因此,尝试将其作为例如sheetdata会产生恐慌:
sheetdata := [][]string{{"1", "2", "3", "4", "5"}, {"1", "2", "3"}}
https://play.golang.org/p/hJXBlO_40O
所以,如果您的错误是这样的:
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数据)。这个假设在here中出现,LoadRecords应该检查并返回错误而不是恐慌。