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

如何将TensorFlow CNN/DailyMail数据集转为Pandas DataFrame并修复报错

修复方案

报错根因

  • tfds.as_dataset()返回的是tf.data.Dataset子类(此处为预取优化后的PrefetchDataset),本身不支持按字段名索引,直接用train_dataset['article']取值必然触发下标错误。
  • 你后续拿到的带b前缀的输出,是TFDS默认将文本以bytes格式存储在样本中,需要解码为utf-8格式的普通字符串。

完整可运行代码

先补充遗漏的pandas导入,再按如下逻辑改写:

import pandas as pd
import tensorflow_datasets as tfds

# 加载数据集(直接用tfds.load比手动初始化builder更简洁,效果完全一致)
train_dataset, test_dataset = tfds.load(
    name="cnn_dailymail",
    split=["train", "test"],
    shuffle_files=False
)

# 手动遍历提取,方便自定义处理逻辑
text_list = []
summary_list = []
# 使用as_numpy_iterator遍历,直接拿到样本的numpy/bytes格式数据
for sample in train_dataset.as_numpy_iterator():
    # 对bytes类型的文本做utf-8解码
    text_list.append(sample["article"].decode("utf-8"))
    summary_list.append(sample["highlights"].decode("utf-8"))

# 构造DataFrame
reviews = pd.DataFrame({"Text": text_list, "Summary": summary_list})
print(reviews.head())

简化写法

TFDS内置了直接转DataFrame的工具,会自动完成bytes解码,不需要手动遍历:

# 直接转成DataFrame后重命名列即可
reviews = tfds.as_dataframe(train_dataset).rename(
    columns={"article": "Text", "highlights": "Summary"}
)
print(reviews.head())

注意点

  • 原代码中遗漏了import pandas as pd,直接运行会报pandas未定义的错误,一定要补导入。
  • 你之前拿到的b"xxx"格式输出,经过上述解码步骤后会变成不带前缀的正常字符串,符合后续Transformer训练的输入要求。
  • CNN/DailyMail本身是英文新闻数据集,解码后得到的英文文本是数据集的原始内容,符合该数据集的训练要求,不需要额外翻译。如果你的下游任务需要中文输出,再单独对接翻译模块即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 23:06:03