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

如何按列值将Pandas DataFrame转换为Hugging Face Dataset?

问题描述

我有如下DataFrame df:

import pandas as pd
from datasets import Dataset

data = [[1, 'Jack', 'A'], [1, 'Jamie', 'A'], [1, 'Mo', 'B'], [1, 'Tammy', 'A'], [2, 'JJ', 'A'], [2, 'Perry', 'C']]
df = pd.DataFrame(data, columns=['id', 'name', 'class'])

输出的df内容:

id   name class
0   1   Jack     A
1   1  Jamie     A
2   1     Mo     B
3   1  Tammy     A
4   2     JJ     A
5   2  Perry     C

我需要将其转换为按id分组、仅含2行的Dataset对象,期望输出如下:

> myDataset
Dataset({
    features: ['id', 'name', 'class'],
    num_rows: 2
})

其中数据结构为:

> myDataset[0:2]
{'id': ['1', '2'], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'],['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}

尝试直接用Dataset.from_pandas(df)转换,得到的是6行的Dataset,不符合需求:

myDataset = Dataset.from_pandas(df) 

输出结果:

> myDataset
Dataset({
    features: ['id', 'name', 'class'],
    num_rows: 6
})
> myDataset[0:2]
{'id': [1, 1], 'name': ['Jack', 'Jamie'], 'class': ['A', 'A']}
解决方案

要实现按id分组的Dataset,需先对DataFrame做分组聚合,再转换为Dataset:

  1. 分组聚合DataFrame
    按id分组,将name和class列聚合为列表,id列保留唯一值:
grouped_df = df.groupby('id').agg({
    'name': list,
    'class': list
}).reset_index()

分组后的grouped_df内容:

id                     name               class
0   1  [Jack, Jamie, Mo, Tammy]  [A, A, B, A]
1   2           [JJ, Perry]        [A, C]
  1. 转换为Dataset
    将聚合后的DataFrame传入Dataset.from_pandas():
myDataset = Dataset.from_pandas(grouped_df)

验证结果:

> myDataset
Dataset({
    features: ['id', 'name', 'class'],
    num_rows: 2
})

> myDataset[0:2]
{'id': [1, 2], 'name': [['Jack', 'Jamie', 'Mo', 'Tammy'], ['JJ', 'Perry']], 'class': [['A', 'A', 'B', 'A'], ['A', 'C']]}

完全符合预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:08:11