【问题标题】:How to combine a Pandas dataframe with a Tensor dataset?如何将 Pandas 数据框与张量数据集结合起来?
【发布时间】:2021-07-25 10:55:36
【问题描述】:

我有一个张量数据集,它是一个文件名列表和一个 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() 调用上运行它,所以我无法访问tf.executing_eagerly() 之类的.numpy() 方法,并且无法从文件名中获取字符串值来执行我的正则表达式和 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}")

标签: python pandas tensorflow


【解决方案1】:

一种迭代方式是通过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}")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多