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

Python中如何对DataFrame指定列每行调用自定义预测函数并输出全量结果

问题原因
  • getPositivity函数返回的是形状为(1,1)的二维numpy数组(即[[0.xxx]]格式),直接赋值给DataFrame列时,pandas无法正常解析嵌套数组结构,大概率会出现整列被最后一次计算值覆盖的问题。
  • 逐行调用model.predict的执行方式效率极低,也可能因为TensorFlow/Keras的预测缓存机制导致结果异常。
解决方案

推荐使用批量预测方案,性能更稳定、执行速度更快:

方案1:批量预测(推荐)

一次性处理所有文本,避免逐行调用预测接口,代码如下:

# 1. 批量转换所有文本为模型输入格式
input_seqs = tokenizer.texts_to_sequences(df_ticker['text'].tolist())
padded_inputs = pad_sequences(input_seqs, maxlen=maxlen)
# 2. 批量预测所有结果
all_preds = model.predict(padded_inputs, verbose=0)
# 3. 把二维预测结果展平为一维数组,赋值给DataFrame
df_ticker['prediction'] = all_preds.flatten()
# 4. 输出CSV,可选择重置索引避免保留原始的3/4/5序号
df_ticker = df_ticker.reset_index(drop=True)
df_ticker.to_csv('NLP_ML.csv', index=False)

方案2:修改预测函数适配逐行调用

如果一定要用apply逐行调用,只需要修改getPositivity函数,直接返回浮点数标量即可:

def getPositivity(my_text):
    seq = tokenizer.texts_to_sequences([my_text])
    seq = pad_sequences(seq, maxlen=maxlen)
    prediction = model.predict(seq, verbose=0)
    # 提取二维数组内的实际得分,转成普通浮点数
    return float(prediction[0][0])

# 后续apply逻辑保持不变
df_ticker['prediction'] = df_ticker['text'].apply(lambda text:getPositivity(text))
df_ticker.to_csv('NLP_ML.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:27:03