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

在Mojo中创建Pandas DataFrame报错的解决方法

在Mojo中创建Pandas DataFrame的报错修复方案

尝试在Mojo中用数据列表创建Pandas DataFrame,参照Numpy的导入使用示例,但创建时持续报错。代码如下:

from python import Python

let pd = Python.import_module("pandas")

var data = [[1, 2, 3],[2, 3, 4],[4, 5, 6]]
var df = pd.DataFrame(data, columns=['cola', 'colb', 'colc'])

收到的错误:

error: Expression [13]:19:41: keyword arguments are not supported yet
    var df = pd.DataFrame(data, columns=['cola', 'colb', 'colc'])
                                        ^

expression failed to parse (no further compiler diagnostics)

不指定列名时的错误:

error: Expression [14]:7:1: no viable expansions found
fn __lldb_expr__14(inout __mojo_repl_arg: __mojo_repl_context__):
^

Expression [14]:9:28:   call expansion failed - no concrete specializations
    __mojo_repl_expr_impl__(__mojo_repl_arg, __get_address_as_lvalue(__mojo_repl_arg.`___lldb_expr_failed`.load().address), __get_address_as_lvalue(__mojo_repl_arg.`pd`.load().address))
                           ^

Expression [14]:13:1:     no viable expansions found
def __mojo_repl_expr_impl__(inout __mojo_repl_arg: __mojo_repl_context__, inout `___lldb_expr_failed`: __mlir_type.`!kgen.declref<@"$builtin"::@"$bool"::@Bool>`, inout `pd`: __mlir_type.`!kgen.declref<@"$python"::@"$object"::@PythonObject>`) -> None:
^

Expression [14]:22:26:       call expansion failed - no concrete specializations
  __mojo_repl_expr_body__()
                         ^

Expression [14]:15:3:         no viable expansions found
  def __mojo_repl_expr_body__() -> None:
  ^

Expression [14]:19:27:           call expansion failed - no concrete specializations
    var df = pd.DataFrame(data)
                          ^

expression failed to parse (no further compiler diagnostics)

修复方案

错误原因分析

  1. 关键字参数不支持:当前Mojo调用Python函数时,暂不支持columns=xxx这类关键字传参方式,这是第一个报错的直接原因。
  2. 类型不兼容:Mojo的多维列表无法直接传递给Python的Pandas构造函数,类型不匹配导致了无具体特化的报错。

修复后的代码

from python import Python

let pd = Python.import_module("pandas")
let py_builtins = Python.import_module("builtins")

# 将Mojo多维列表转换为Python原生列表
var mojo_data = [[1, 2, 3],[2, 3, 4],[4, 5, 6]]
let python_data = py_builtins.list([py_builtins.list(row) for row in mojo_data])

# 创建DataFrame(绕开关键字参数)
var df = pd.DataFrame(python_data)
# 单独设置列名
df.columns = py_builtins.list(['cola', 'colb', 'colc'])

# 打印验证结果
print(df)

关键步骤说明

  • 导入Python的builtins模块,用于将Mojo列表转换为Python原生列表,解决类型不兼容问题。
  • 逐行将Mojo的一维列表转为Python列表,再组合成Python二维列表,确保Pandas能识别输入数据。
  • 先创建无列名的DataFrame,再通过直接赋值df.columns的方式设置列名,避开Mojo不支持关键字参数的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:35:10