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

如何合并Orange数据表导出的二维NumPy数组内三列文本?

解决单数组内多列文本合并问题

错误原因

你遇到的TypeError是因为np.hstack()只接受一个参数(数组的序列),但你直接传入了三个单独的数组切片。而且hstack的作用是将多个数组在水平方向堆叠(比如把三列拼成一个更长的一维数组),这和你要合并每行的三个文本字符串的需求不匹配。

正确解决方案

根据你使用Orange的场景,分两种情况处理:

情况1:in_data是结构化NumPy数组

如果in_data是支持列名索引的结构化NumPy数组,直接遍历每行拼接字符串:

import numpy as np

# 合并每行的三个文本列,可自定义分隔符(比如空格、换行)
merged_text = np.array(
    [f"{cb} {hit} {ca}" 
     for cb, hit, ca in zip(in_data['ContextBefore'], in_data['Hit'], in_data['ContextAfter'])],
    dtype=str
)

# 可选:将合并后的列添加到原数组中
out_data = np.lib.recfunctions.append_fields(
    in_data, 
    'MergedText', 
    merged_text, 
    usemask=False
)

# 查看前10行结果
print(out_data['MergedText'][:10])

情况2:in_data是Orange Table对象

在Orange的Python脚本模块中,输入数据通常是Orange.data.Table类型,更适合直接操作行数据:

from Orange.data import StringVariable

# 创建新的字符串列用于存储合并结果
merged_col = StringVariable("MergedText")
out_data = in_data.add_column(merged_col)

# 遍历每行合并文本
for row in out_data:
    # 自定义分隔符,比如用空格连接,或根据需求调整
    row["MergedText"] = f"{row['ContextBefore']} {row['Hit']} {row['ContextAfter']}"

# 查看前10行结果
print([row["MergedText"] for row in out_data[:10]])

补充说明

如果你确实需要用hstack堆叠数组(比如把三列元素拼成一维数组),正确写法是将数组放进列表:

# 仅堆叠数组,不合并文本
stacked_array = np.hstack([in_data[:, 'ContextBefore'], in_data[:, 'Hit'], in_data[:, 'ContextAfter']])

但这不符合你合并每行文本的需求,所以优先用前面的字符串拼接方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:52:45