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

运行pandas join时Jupyter内核崩溃,求原因及解决方法

内核崩溃原因及解决办法

核心原因:内存资源耗尽

你的计算需求远超当前环境的内存上限:

  • 连接后的结果表规模约为 1586万行 × 396列,按单元素8字节估算,内存需求接近50GB,而Colab默认内存仅12-16GB左右,内存过载直接导致内核崩溃。
  • 用TRAIN.head()测试时仅处理少量行,内存占用极低,因此能正常运行。

解决办法

1. 关闭排序以减少内存开销

去掉sort=True参数,排序操作会额外占用大量内存和计算资源,若后续不需要有序结果可直接省略:

X_student = TRAIN.join(STUDENT, on='UserId', how='inner')

2. 只保留必要列

STUDENT有390列,先筛选出后续分析真正需要的列,大幅压缩结果表规模:

# 示例:仅保留STUDENT中需要的列
selected_cols = ['col1', 'col2', 'col3']
STUDENT_filtered = STUDENT[selected_cols]
X_student = TRAIN.join(STUDENT_filtered, on='UserId', how='inner')

3. 优化数据类型压缩内存

对两表的数据类型进行轻量化处理:

  • 数值列:将float64转为float32,int64转为int32/int16(需确保数值范围不溢出)
  • 字符串列:若存在大量重复值,转为category类型
# 优化TRAIN的数值列
TRAIN = TRAIN.astype({col: 'float32' for col in TRAIN.select_dtypes('float64').columns})
# 优化STUDENT的字符串列为category
STUDENT = STUDENT.astype({col: 'category' for col in STUDENT.select_dtypes('object').columns})

4. 分块处理数据

将TRAIN拆分为多个小批次,逐个与STUDENT连接后再合并结果,避免一次性加载全量数据:

chunk_size = 1_000_000  # 按100万行分块
# 若TRAIN来自CSV文件,直接分块读取
chunks = []
for chunk in pd.read_csv('train_data.csv', chunksize=chunk_size):
    chunk_join = chunk.join(STUDENT, on='UserId', how='inner')
    chunks.append(chunk_join)
X_student = pd.concat(chunks, ignore_index=True)

# 若TRAIN已在内存中,手动拆分
chunks = [TRAIN[i:i+chunk_size] for i in range(0, len(TRAIN), chunk_size)]
X_student = pd.concat([chunk.join(STUDENT, on='UserId', how='inner') for chunk in chunks], ignore_index=True)

5. 使用大数据框架处理

若上述方法仍无法解决,改用Dask替代pandas,它会自动分块处理数据,无需手动管理内存:

import dask.dataframe as dd

# 将pandas DataFrame转为Dask DataFrame
dd_train = dd.from_pandas(TRAIN, npartitions=10)
dd_student = dd.from_pandas(STUDENT, npartitions=2)

# 执行连接操作
dd_result = dd_train.join(dd_student, on='UserId', how='inner')
# 按需计算或导出(内存足够时再compute,否则直接导出为文件)
X_student = dd_result.compute()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:55:21