You need to enable JavaScript to run this app. 对pandas dataframe列应用.split()分词时出现RAM崩溃问题如何解决
优惠活动
大模型
产品
解决方案
定价
更多

对pandas dataframe列应用.split()分词时出现RAM崩溃问题如何解决

问题原因

你遇到的内存崩溃问题核心来自两点:

  1. 自定义函数+apply的逐行迭代写法会产生大量多余的中间内存拷贝,运行效率低、内存开销大
  2. 将整列字符串全部转换为列表类型存储时,pandas存储object类列表的内存开销远高于原始字符串,数据量大时会直接占满Colab的可用RAM

解决方法

方法1:使用pandas内置矢量化操作替代apply

pandas内置的str.split()是C实现的矢量化操作,比自定义apply函数的内存占用低数倍,运行速度也快很多,直接替换原有代码即可:

# 先填充空值避免报错
df_Train["BULLET_POINTS"] = df_Train["BULLET_POINTS"].fillna("")
# 直接调用矢量化分词,无需自定义函数和apply
df_Train["BULLET_POINTS"] = df_Train["BULLET_POINTS"].str.split()
df_Train.head()

方法2:分块处理全量数据集

如果数据集本身很大,一次性加载全量到内存已经接近RAM上限,直接在读入阶段分块处理,处理完成后再合并或者分步存储:

import pandas as pd

# 可根据Colab可用内存调整单块行数,一般1-5万行都可以
chunk_size = 20000
processed_chunks = []

for chunk in pd.read_csv("你的训练数据路径.csv", chunksize=chunk_size):
    chunk["BULLET_POINTS"] = chunk["BULLET_POINTS"].fillna("").str.split()
    processed_chunks.append(chunk)

# 合并所有处理好的分块,也可以每块单独存为临时文件进一步降低内存占用
df_Train = pd.concat(processed_chunks, ignore_index=True)

方法3:不将分词结果存回DataFrame

如果后续只需要迭代使用分词结果(比如训练词向量、统计词频),可以直接生成迭代器,不把全量分词结果存入DataFrame,内存开销降到最低:

def get_token_iter(df):
    for text in df["BULLET_POINTS"].fillna(""):
        yield text.split()

# 后续处理直接使用该迭代器即可,无需存储全部分词结果
token_iter = get_token_iter(df_Train)

额外优化建议

  • 处理过程中及时删除不需要的变量和列,主动调用gc.collect()释放内存
  • 可尝试切换Colab的高内存运行时,获得更大的RAM配额

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:48:00