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

Google Colab加载NLP项目pickle文件遇int64 dtype解析错误

解决Colab加载NLP项目中dtm_stop.pkl文件的类型错误问题

问题背景

运行adashofdata的NLP项目时,在Google Colab环境执行4-Topic-Modeling.ipynb代码,加载dtm_stop.pkl文件时触发TypeError: Cannot interpret 'dtype('int64')' as a data type错误,已尝试pickle、cloudpickle、joblib加载均无效,需要可行的解决或格式转换方案。

报错代码

import pickle
import pandas as pd
import numpy as np
from google.colab import drive
import joblib

# 挂载Google Drive
drive.mount('/content/drive')

# 文件路径
file_path = '/content/drive/MyDrive/Colab Notebooks/pynb/pickle/'

# 尝试加载文件
try:
    with open(file_path + 'dtm_stop.pkl', 'rb') as f:
        data = joblib.load(file_path + 'dtm_stop.pkl')  # 使用joblib加载

    # 检查加载数据的类型
    print("Data type:", type(data))

    # 转换数据类型处理错误值
    if isinstance(data, np.ndarray):
        print("Data loaded as numpy ndarray")
        data = data.astype(np.float64, errors='ignore')
    elif isinstance(data, pd.DataFrame):
        print("Data loaded as DataFrame")
        data = data.apply(pd.to_numeric, errors='coerce')
    else:
        print("Data is not a DataFrame or numpy array, data type:", type(data))

except Exception as e:
    print(f"Error loading with pickle: {e}")
    raise e

# 输出加载的数据
print(data)

错误信息

Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
Error loading with pickle: Cannot interpret 'dtype('int64')' as a data type
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-22-285aaeee691b> in <cell line: 0>()
     30 except Exception as e:
     31     print(f"Error loading with pickle: {e}")  # Print the error message in more detail
---> 32     raise e
     33 
     34 # Let's see the loaded data

5 frames
/usr/local/lib/python3.11/dist-packages/numpy/_core/numeric.py in _frombuffer(buf, dtype, shape, order)

TypeError: Cannot interpret 'dtype('int64')' as a data type

解决方法

1. 匹配原项目依赖版本

该错误大概率是Colab默认的numpy/scikit-learn版本与原项目保存dtm_stop.pkl时的版本不兼容导致。查看原项目的requirements.txt或环境配置,在Colab中安装对应版本的依赖:

# 示例:替换为原项目实际使用的版本号
!pip install numpy==1.21.6 pandas==1.3.5 scikit-learn==1.0.2

安装完成后重启Colab内核,再尝试加载文件。

2. 调整加载参数

尝试使用pickle低协议加载,或指定编码格式:

import pickle

with open(file_path + 'dtm_stop.pkl', 'rb') as f:
    # 使用协议4加载(适配旧版本序列化的文件)
    data = pickle.load(f, protocol=4, encoding='latin1')

或使用cloudpickle加载:

import cloudpickle

with open(file_path + 'dtm_stop.pkl', 'rb') as f:
    data = cloudpickle.load(f)

3. 转换文件格式(替代方案)

如果无法通过版本或加载参数解决,可在本地能正常加载该pkl文件的环境中,将其转换为兼容性更好的格式(如Parquet、NPZ),再上传到Colab使用:

本地转换代码:

import pickle
import pandas as pd
import numpy as np

# 本地加载pkl文件
with open('dtm_stop.pkl', 'rb') as f:
    dtm_data = pickle.load(f)

# 根据数据类型选择转换格式
if isinstance(dtm_data, pd.DataFrame):
    # 转Parquet格式(高效且保留类型信息)
    dtm_data.to_parquet('dtm_stop.parquet')
elif isinstance(dtm_data, np.ndarray):
    # 转NPZ格式(numpy专用格式)
    np.savez('dtm_stop.npz', data=dtm_data)

Colab加载转换后的文件:

# 加载Parquet文件
import pandas as pd
dtm_data = pd.read_parquet('/content/drive/MyDrive/Colab Notebooks/pynb/pickle/dtm_stop.parquet')

# 或加载NPZ文件
import numpy as np
loaded_data = np.load('/content/drive/MyDrive/Colab Notebooks/pynb/pickle/dtm_stop.npz')
dtm_data = loaded_data['data']

4. 重新生成pkl文件

直接在Colab中从头运行项目的前置notebook(如1-Data-Cleaning.ipynb到3-Text-Representation.ipynb),重新生成dtm_stop.pkl文件,完全规避版本差异带来的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:19:58