我有以下資料框df:
sales
2015-10-05 -0.462626
2015-10-06 -0.540147
2015-10-07 -0.450222
2015-10-08 -0.448672
2015-10-09 -0.451773
... ...
2019-10-16 -0.594413
2019-10-17 -0.620770
2019-10-18 -0.586660
2019-10-19 -0.586660
2019-10-20 -0.671934
11340 rows × 1 columns
我變成了tf.data.Dataset這樣:
data = np.array(df)
ds = tf.keras.utils.timeseries_dataset_from_array(
data=data,
targets=None,
sequence_length=4,
sequence_stride=1,
shuffle=False,
batch_size=1,)
資料集給了我這樣的記錄
print(next(iter(ds)))
tf.Tensor(
[[[-0.4626256 ]
[-0.54014736]
[-0.4502221 ]
[-0.44867167]]], shape=(1, 4, 1), dtype=float32)
我用它來訓練我的 ML 模型,但是,我需要一種方法來查找與我從資料集中獲取的值相對應的日期。使用從上面資料集中獲取的示例,我想找到與這些連續值對應的日期,從我們可以看到的資料框中是[2015-10-05, 2015-10-06, 2015-10-07, 2015-10-08]. 理想情況下,如果資料框有幾列,我也想獲得其他屬性。有沒有辦法這樣做?
uj5u.com熱心網友回復:
您可以嘗試使用另一個資料集作為查找。這樣,您可以根據需要添加更多屬性:
import pandas as pd
import numpy as np
import tensorflow as tf
df = pd.DataFrame(data={'date': ['2015-10-05', '2015-10-06', '2015-10-07', '2015-10-08', '2015-10-09', '2019-10-16', '2019-10-17', '2019-10-18', '2019-10-19', '2019-10-20'],
'sales': [-0.462626, -0.540147, -0.450222, -0.448672, -0.451773, -0.594413, -0.620770, -0.586660, -0.586660, -0.671934]})
data = np.array(df['sales'])
ds = tf.keras.utils.timeseries_dataset_from_array(
data=data,
targets=None,
sequence_length=4,
sequence_stride=1,
shuffle=False,
batch_size=1,)
d = tf.data.Dataset.from_tensor_slices((df['date'].to_numpy())).batch(1)
dates = d.flat_map(tf.data.Dataset.from_tensor_slices).window(4, shift=1, stride=1).flat_map(lambda x: x.batch(4)).batch(1)
d = tf.data.Dataset.zip((dates, ds))
def lookup(tensor, dataset):
dataset = dataset.filter(lambda x, y: tf.reduce_all(tf.equal(y, tensor)))
return [x.numpy().decode('utf-8') for x in list(dataset.map(lambda x, y: tf.squeeze(x, axis=0)))[0]]
result = lookup(next(iter(ds)), d)
print(result)
['2015-10-05', '2015-10-06', '2015-10-07', '2015-10-08']
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437203.html
上一篇:如何使用VGG16模型提取特征并將它們用作另一個模型的輸入(比如resnet、vit-keras等)?
下一篇:TensorFlow版本不匹配
