【问题标题】:creating a pandas dataframe from a list of image files从图像文件列表创建熊猫数据框
【发布时间】:2017-03-09 13:01:25
【问题描述】:

我正在尝试从图像文件列表(.png 文件)创建熊猫数据框

samples = []
img = misc.imread('a.png')
X = img.reshape(-1, 3)
samples.append(X)

我在这样的示例中添加了多个 .png 文件。然后我正在尝试从中创建一个熊猫数据框。

df = pd.DataFrame(samples)

它抛出错误“ValueError: Must pass 2-d input”。这里有什么问题?是否真的可以将图像文件列表转换为熊猫数据框。我对熊猫完全陌生,所以如果这看起来很傻,请不要介意。
例如。
X = [[1,2,3,4],[2,3,4,5]] df = pd.DataFrame(X)
正如预期的那样(第 2 行第 4 列)给了我一个很好的样本 2 数据框,但它不会发生在图像文件中。

【问题讨论】:

  • DataFrame() 需要一个数组作为输入,不是吗,不是列表?
  • 接下来你想用图片中的数据做什么?
  • 我需要在上面实现 Isomap,然后需要从中创建一个 2d 散点图,但我没有走到那一步。另请参阅我的问题的最后一部分,我对其进行了编辑。
  • 图像是二维数据。 DataFrame 是二维的。如果您想要一个图像数组,该数组将是 3 维数据,那么您可以使用 Panel 或 DataFrame 的 Python 列表,但不能使用单个 DataFrame。或者,我认为您可以将图像对象存储在一维 Series 中,但我不确定这会有什么帮助。
  • 您希望DataFrame 的形状是什么?

标签: python pandas


【解决方案1】:

你可以使用:

df = pd.DataFrame.from_records(samples)

【讨论】:

    【解决方案2】:

    如果您想从列表中创建 DataFrame,最简单的方法是创建 pandas.Series,如下例所示:

    import pandas as pd
    
    samples = ['a','b','c']
    s = pd.Series(samples)
    print s
    

    输出:


    0个
    1个
    2c

    【讨论】:

    • 请看我问题的最后一部分,我编辑了它。
    • 这会创建一个 Series,而不是 DataFrame。
    【解决方案3】:
    X = img.reshape(-1, 3)
    samples.append(X)
    

    所以 X 是一个大小为 (number_of_pixels,3) 的 2D 数组,这使得样本成为一个大小为 (number_of_images, numbers_pixels, 3) 的 3D 列表。所以你得到的错误(“ValueError: Must pass 2-d input”)是合法的。

    你可能想要的是:

    X = img.flatten() 
    

    X = img.reshape(-1)
    

    两者都会给你 X 大小 (number_of_pixels*3,) 和大小样本 (number_of_images, number_of_pixels*3)。

    您可能会特别注意确保所有图像具有相同数量的像素和通道。

    【讨论】:

      【解决方案4】:

      你可以使用 reshape(-1)

      x.append((img[::2,::2]/255.0).reshape(-1)) 
      df = pd.DataFrame(x)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-14
        • 2021-06-08
        • 2017-08-27
        • 2021-09-29
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-09-21
        相关资源
        最近更新 更多