python dataset笔记(Dataset类)
·
Dataset类
Dataset类是Hugging Face datasets库中的核心类,用于高效加载、处理和存储大规模数据集。它提供类似pandas的易用接口,同时支持内存映射和流式加载,特别适合处理超大规模数据。
1、核心特性
(1)内存优化:自动使用内存映射(Arrow格式),处理远超内存大小的数据
(2)流式加载:支持逐步读取数据,无需完整下载
(3)类Pandas API:提供数据的map、filter、select等方法
(4)版本控制:与git集成,支持数据集版本管理
(5)跨框架兼容:可直接转换为pytorch/tensorflow的Dataset格式
2、简单使用
(1)创建dataset
from datasets import Dataset
import pandas as pd
# 从字典创建
data = {"text": ["Hello", "World"], "label": [0, 1]}
dataset = Dataset.from_dict(data)
# 从Pandas创建
df = pd.DataFrame(data)
dataset = Dataset.from_pandas(df)
# 从文件创建(支持JSON/CSV/Parquet等)
dataset = Dataset.from_json("data.json")
(2)数据操作
# 查看样例
print(dataset[0]) # 输出: {"text": "Hello", "label": 0}
# 添加列
dataset = dataset.add_column("length", [len(t) for t in dataset["text"]])
# 过滤数据
dataset = dataset.filter(lambda x: x["label"] == 1)
# 映射处理
def preprocess(example):
example["text"] = example["text"].lower()
return example
dataset = dataset.map(preprocess)
(3)保存与加载
# 保存为本地文件
dataset.save_to_disk("my_dataset") # 保存为Arrow格式
dataset.to_csv("data.csv") # 导出为CSV
# 从磁盘加载
reloaded_dataset = Dataset.load_from_disk("my_dataset")
3、进阶处理
(1)流式处理
from datasets import load_dataset
# 流式加载超大数据集
dataset = load_dataset("imdb", streaming=True) # 数据逐步读取
for example in dataset["train"]: # 不会一次性加载到内存
print(example)
(2)与Transformer无缝集成
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# 批量分词
def tokenize_fn(examples):
return tokenizer(examples["text"], truncation=True)
dataset = dataset.map(tokenize_fn, batched=True) # 自动处理批次
(3)性能优化技巧
# 启用多进程处理(加速map操作)
dataset = dataset.map(preprocess, num_proc=4)
# 内存映射缓存
dataset = dataset.map(..., cache_file_name="cache.arrow")
# 数据洗牌
dataset = dataset.shuffle(seed=42)
注:
(1)内存映射缓存:操作系统将磁盘文件直接映射到进程的虚拟内存地址空间,程序通过内存指针访问文件内容,无需手动加载整个文件到物理内存。内存映射缓存通过“磁盘即内存”的设计,实现了大数据的低内存处理,而智能缓存机制平衡了速度与资源的消耗。这是dataset库能高效处理海量数据的核心秘密。
(2)数据洗牌:数据洗牌是指训练机器学习模型前,将数据集的样本数据随机打乱,以避免数据中存在潜在的顺序偏差(如按类别、时间排序),从而让模型更均衡的学习数据特征。
4、数据格式转换
| 目标框架 | 转换方法 |
|---|---|
| PyTorch | dataset.set_format('torch') |
| Tensorflow | dataset.to_tf_dataset(...) |
| Pandas | dataset.to_pandas() |
| NumPy | dataset.to_numpy() |
更多推荐

所有评论(0)