from datasets import ClassLabel, Sequence
import random
import pandas as pd
from IPython.display import display, HTML
def show_random_elements(dataset, num_examples=10):
assert num_examples <= len(dataset), "Can't pick more elements than there are in the dataset."
picks = []
for _ in range(num_examples):
pick = random.randint(0, len(dataset)-1)
while pick in picks:
pick = random.randint(0, len(dataset)-1)
picks.append(pick)
df = pd.DataFrame(dataset[picks])
for column, typ in dataset.features.items():
if isinstance(typ, ClassLabel):
df[column] = df[column].transform(lambda i: typ.names[i])
elif isinstance(typ, Sequence) and isinstance(typ.feature, ClassLabel):
df[column] = df[column].transform(lambda x: [typ.feature.names[i] for i in x])
display(HTML(df.to_html()))
上面的代码是显示在 HuggingFace 数据集中随机选取的一些示例的函数。
我有两个问题。
(lambda i: typ.names[i])
我不明白这个 lambda 函数到底做了什么。
- 与第一个问题类似,为什么
df[column]
需要转换?
正如我print(df[column])
在 line 之前和之后放置的那样df[column] = df[column].transform(lambda i: typ.names[i])
,我看到没有任何改变。
谢谢。