Golang中DataFrame系列0的索引错误:未知索引模式问题解析

Golang中DataFrame系列0的索引错误:未知索引模式问题解析

map[0:DataFrame错误:系列0错误:索引错误:未知索引模式 1:DataFrame错误:系列0错误:索引错误:未知索引模式]

package main

import (
    "fmt"
    "log"
    "os"
    "github.com/go-gota/gota/dataframe"
)

func main() {
    fileOpen, err := os.Open("./advertising.csv")
    if err != nil {
        log.Fatal(err)
    }

    CSVRead := dataframe.ReadCSV(fileOpen)

    trainData := CSVRead.Nrow() / 5
    testData := (CSVRead.Nrow() * 4) / 5

    if trainData+testData < CSVRead.Nrow() {
        trainData++
    }

    trainDf := make([]float64, trainData)
    testDf := make([]float64, testData)

    for i := 0; i < trainData; i++ {
        trainDf[i] = float64(i)
    }

    for i := 0; i < testData; i++ {
        testDf[i] = float64(trainData) + float64(i)
    }

    dfTrain := CSVRead.Subset(trainDf)
    dfTest := CSVRead.Subset(testDf)

    // CSVName := []string{"train.csv", "test.csv"}

    setMap := map[int]dataframe.DataFrame{
        0: dfTrain,
        1: dfTest,
    }

    fmt.Println(setMap)

    // for i, setName := range CSVName {
    //  f, err := os.Create(setName)
    //  if err != nil {
    //      log.Fatal(err)
    //  }
    //  writer := bufio.NewWriter(f)
    //  if err := setMap[float64(i)].WriteCSV(writer); err != nil {
    //      fmt.Println(err)
    //  }
    // }
}

更多关于Golang中DataFrame系列0的索引错误:未知索引模式问题解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
sean@debaspirian:~/gopath/src/forum.golangbridge.org/map-0-dataframe-error-error-on-series-0-indexing-error-unknown-indexing-mode-1-dataframe-error-error-on-series-0-indexing-error-unknown-indexing-mode_19104$ go run ./main.go
2020/05/26 16:43:51 open ./advertising.csv: no such file or directory
exit status 1

更多关于Golang中DataFrame系列0的索引错误:未知索引模式问题解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个错误是因为在使用 gota 库的 Subset() 方法时,传入的索引切片类型不正确。Subset() 方法期望接收的是 []int 类型的索引切片,但你传入了 []float64 类型。

以下是修正后的代码:

package main

import (
    "fmt"
    "log"
    "os"
    "github.com/go-gota/gota/dataframe"
)

func main() {
    fileOpen, err := os.Open("./advertising.csv")
    if err != nil {
        log.Fatal(err)
    }

    CSVRead := dataframe.ReadCSV(fileOpen)

    trainData := CSVRead.Nrow() / 5
    testData := (CSVRead.Nrow() * 4) / 5

    if trainData+testData < CSVRead.Nrow() {
        trainData++
    }

    // 修正:使用 []int 类型而不是 []float64
    trainDf := make([]int, trainData)
    testDf := make([]int, testData)

    for i := 0; i < trainData; i++ {
        trainDf[i] = i  // 直接使用 int 类型
    }

    for i := 0; i < testData; i++ {
        testDf[i] = trainData + i  // 直接使用 int 类型
    }

    dfTrain := CSVRead.Subset(trainDf)
    dfTest := CSVRead.Subset(testDf)

    setMap := map[int]dataframe.DataFrame{
        0: dfTrain,
        1: dfTest,
    }

    fmt.Println(setMap)
}

如果你确实需要使用浮点数索引,可以先将它们转换为整数:

// 如果需要从 float64 转换
trainDf := make([]int, trainData)
testDf := make([]int, testData)

for i := 0; i < trainData; i++ {
    trainDf[i] = int(float64(i))  // 显式转换
}

for i := 0; i < testData; i++ {
    testDf[i] = int(float64(trainData) + float64(i))  // 显式转换
}

gota 库的 Subset() 方法签名如下:

func (df DataFrame) Subset(indexes interface{}) DataFrame

它支持 []int 类型的索引,但不支持 []float64 类型。这就是出现 “索引错误:未知索引模式” 错误的原因。

回到顶部