4

我想根据训练数据的 pandas 数据框推断具有 tensorflow 数据验证 (tfdv) 的模式。数据框包含具有多价特征的列,其中可以同时存在该特征的多个值(或无)。

给定以下数据框:

df = pd.DataFrame([{'feat_1': 13, 'feat_2': 'AA, BB', 'feat_3': 'X'},
                   {'feat_1': 7, 'feat_2': 'AA', 'feat_3': 'Y'},
                   {'feat_1': 7, 'feat_2': None, 'feat_3': None}])

推断和显示模式会导致:

在此处输入图像描述

因此,tfdv 将 'feat_2' 值视为单个字符串,而不是在 ',' 处拆分它们以生成 'AA'、'BB' 的域:

在此处输入图像描述

如果将特征的值保存为 eg, ['AA', 'BB'],则模式推断会引发错误:

ArrowTypeError: ("Expected bytes, got a 'list' object", 'Conversion failed for column feat_2 with type object')

有什么办法可以用 tfdv 实现这一点?

4

1 回答 1

3

AString将被解释为 a String。关于你的问题List,它可能与这个问题有关:

目前仅支持原始类型的 pandas 列。

找不到更新的内容。这是一种解决方法:

import pandas as pd
import tensorflow_data_validation as tfdv

df = pd.DataFrame([{'feat_1': 13, 'feat_2': 'AA, BB', 'feat_3': 'X'},
                   {'feat_1': 7, 'feat_2': 'AA', 'feat_3': 'Y'},
                   {'feat_1': 7, 'feat_2': None, 'feat_3': None}])

df['feat_2'] = df['feat_2'].str.split(',')
df = df.explode('feat_2').reset_index(drop=True)

train_stats = tfdv.generate_statistics_from_dataframe(df)
schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

在此处输入图像描述

于 2022-02-23T08:50:35.397 回答