如何将Pandas数据帧与Tensor数据集相结合



我有一个Tensor数据集,它是一个文件名列表,还有一个Pandas数据帧,其中包含每个文件的元数据。

filename_ds = tf.data.Dataset.list_files(path + "/*.bmp")
metadata_df = pandas.read_csv(path + "/metadata.csv")

文件名包含引用元数据数据帧中的一行的idx,如";3_data.bmp";其中3是idx。我希望给filename_ds.map(combine_data)打电话。

它似乎不像解析文件名和查找数据帧那么简单。以下操作失败,因为filename是张量,并且由于我在Dataset.map()调用上运行它,所以我无法访问像.numpy()这样的tf.executing_eagerly()方法,也无法从文件名中获取字符串值来进行regex和df查找。

combine_data(filename)
idx = re.findall("(d+)_data.bmp", filename)[0]
val = metadata_df.loc[metadata_df["idx"] == idx]["test-col"]
...

Tensorflow的新手,我怀疑我会以一种奇怪的方式来做这件事。解决这个问题的正确方法是什么?我可以列出我的文件并为每个文件连接一个数据集,但我想知道我是否只是错过了";Tensorflow方式";

一种迭代方式是通过as_numpy_iterator()

dataset_list=list(filename_ds.as_numpy_iterator())
for each_file in dataset_list:

file_name=each_file.decode('utf-8') # this will contain the abs path /user/me/so/file_1.png
try:
idx=re.findall("(d+).*.png", file_name)[0] # changed for my case
except :
print("Exception==>")
print(f"File:{file_name},idx:{idx}")

最新更新