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

使用datasets包创建DatasetDict时遇列名不匹配错误求助

问题:使用datasets包创建数据集时出现"Couldn't cast because column names don't match"错误

我的DataFrame包含text和label两列,执行以下代码时触发了ValueError,错误核心提示为列名不匹配,无法完成类型转换:

from sklearn.model_selection import train_test_split
from datasets import Features, ClassLabel, Value, Dataset, DatasetDict

df_train, df_tmp = train_test_split(
        movie_df,stratify=movie_df["label"], test_size=0.2)

df_val, df_test = train_test_split(
        df_tmp,stratify=df_tmp["label"], test_size=0.5)

ds_features = Features({"text": Value("string"), "label": ClassLabel(names=labels)})

dataset = DatasetDict({
    "train": Dataset.from_pandas(df_train.reset_index(drop=True),features=ds_features),
    "valid": Dataset.from_pandas(df_val.reset_index(drop=True),features=ds_features),
    "test": Dataset.from_pandas(df_test.reset_index(drop=True),features=ds_features)})

dataset

我期望得到的数据集结构如下:

DatasetDict({
    train: Dataset({
        features: ['text', 'label'],
        num_rows: 13267
    })
    valid: Dataset({
        features: ['text', 'label'],
        num_rows: 1658
    })
    test: Dataset({
        features: ['text', 'label'],
        num_rows: 1659
    })
})

解决方案

1. 检查并清理DataFrame的列

分割后的DataFrame可能残留了额外列(比如原DataFrame的其他列,或者索引处理不彻底),导致和ds_features定义的列名不匹配。先打印列名确认:

print(df_train.columns)
print(df_val.columns)
print(df_test.columns)

如果输出包含text、label之外的列,直接筛选保留目标列:

df_train = df_train[["text", "label"]]
df_val = df_val[["text", "label"]]
df_test = df_test[["text", "label"]]

2. 验证类别列表labels的完整性

ClassLabel(names=labels)要求labels必须包含DataFrame中label列的所有唯一取值,否则会触发转换错误。执行以下代码确认:

print(set(df_train["label"].unique()) == set(labels))

如果返回False,更新labels列表,确保覆盖所有类别。

3. 简化创建流程(可选)

将分割后的DataFrame整理成字典后统一转换,减少重复代码:

df_dict = {
    "train": df_train[["text", "label"]].reset_index(drop=True),
    "valid": df_val[["text", "label"]].reset_index(drop=True),
    "test": df_test[["text", "label"]].reset_index(drop=True)
}
dataset = DatasetDict({k: Dataset.from_pandas(v, features=ds_features) for k, v in df_dict.items()})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:57:31