如何从张量流数据集中删除单个特征,如何在单个特征上应用?

How to remove single feature from tensorflow dataset, how to use apply on single feture?

我使用 dataset = tf.data.experimental.make_csv_dataset() 函数从 csv 文件创建了数据集,但我的数据集具有分类和数字特征。

dataset=
color  price weight
red    120    1.2
blue    80     2.0
green   90     3

问题一: 问题是我怎样才能只修改单个特征,例如权重+2,到:

dataset=
color  price weight
red    120    3.2
blue    80     4.0
green   90     5

我尝试做类似的事情:

dataset = dataset.apply(lambda x: x['weight']+2)

但错误是:“类型错误:'FilterDataset' 对象不可订阅”

文档中的示例 https://www.tensorflow.org/api_docs/python/tf/data/Dataset#apply 未显示。

问题二: 如何删除单个功能?是否有任何等同于 pandas 删除列?

您可以通过仅过滤所需的功能来删除功能。这就是您如何只能修改一项功能:

import tensorflow as tf
import pandas as pd

df = pd.DataFrame(data={'color': ['red', 'blue','green'], 'price': [120, 80, 90], 'weight': [3.2, 4.0, 5]})
df.to_csv('data.csv', index=False)

dataset = tf.data.experimental.make_csv_dataset('/content/data.csv', batch_size=1, num_epochs = 1, shuffle=False)
dataset = dataset.map(lambda x: (x['color'], x['price'], x['weight']+2))

for x in dataset:
  print(x[0], x[1], x[2])
tf.Tensor([b'red'], shape=(1,), dtype=string) tf.Tensor([120], shape=(1,), dtype=int32) tf.Tensor([5.2], shape=(1,), dtype=float32)
tf.Tensor([b'blue'], shape=(1,), dtype=string) tf.Tensor([80], shape=(1,), dtype=int32) tf.Tensor([6.], shape=(1,), dtype=float32)
tf.Tensor([b'green'], shape=(1,), dtype=string) tf.Tensor([90], shape=(1,), dtype=int32) tf.Tensor([7.], shape=(1,), dtype=float32)