You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Go Gota的mutate创建新列时遇‘wrong dimensions’错误求助

解决Gota DataFrame Mutate维度不匹配问题:从rapply结果提取Series

问题根源

你遇到的mutate: wrong dimensions错误,核心原因是df.Select("B").rapply(logFunc)返回的是单列DataFrame,而非你预期的Series。直接把这个DataFrame传给Series.New会导致生成的"Series"实际维度不匹配,触发Gota的长度校验逻辑。

解决方案步骤

  1. 从rapply返回的DataFrame中提取目标Series
    因为rapply作用于DataFrame时,会返回结构一致的DataFrame(哪怕只有一列),你可以通过Col方法提取其中的Series:

    • 通过索引提取:targetSeries := newColDF.Col(0)(单列DataFrame的索引为0)
    • 通过列名提取:如果rapply保留了原列名,也可以用targetSeries := newColDF.Col("B")
  2. 修正Mutate调用代码
    注意Gota的方法是大写开头的Mutate(不是小写mutate),且直接传入提取到的Series即可,无需再用Series.New包装(如果需要重命名列,可以先给Series改名)。

完整修正代码

import (
    "math"
    "github.com/go-gota/gota/dataframe"
    "github.com/go-gota/gota/series"
)

func main() {
    // 假设df是已初始化的包含A、B列的DataFrame
    logFunc := func(s series.Series) series.Series {
        floats := s.Float()
        outCol := []float64{}
        for _, f := range floats {
            outCol = append(outCol, math.Ceil(1-math.Log(f)))
        }
        return series.Floats(outCol)
    }

    // 1. 用Rapply处理得到单列DataFrame(注意Rapply大写开头)
    newColDF := df.Select("B").Rapply(logFunc)
    // 2. 提取其中的Series
    targetSeries := newColDF.Col(0)
    // 可选:给Series重命名为"C"
    targetSeries = targetSeries.Rename("C")
    // 3. 调用Mutate添加新列
    newDF := df.Mutate(targetSeries)
    fmt.Println(newDF)
}

额外错误修正说明

  • 原代码中df.mutate应为df.Mutate(Gota的API遵循Go的大小写规范,导出方法大写开头)
  • 原代码Series.New(newCol, series.Float, "C")参数错误:newCol是DataFrame,不是Series.New所需的原始数据切片或Series
  • 原代码末尾缺少右括号,导致语法错误

内容的提问来源于stack exchange,提问作者Axas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:01:15