在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)
修复方案
错误原因分析
- 关键字参数不支持:当前Mojo调用Python函数时,暂不支持
columns=xxx这类关键字传参方式,这是第一个报错的直接原因。 - 类型不兼容: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
相关产品推荐
相关产品推荐

