【问题标题】:How to reshape each row of a Dataframe?如何重塑数据框的每一行?
【发布时间】:2019-09-23 10:28:11
【问题描述】:

我有一个数据框,其中每一行对应于图像的 1024 个像素值。我想将每一行重塑为 32x32 图像。我的数据框的形状是 (32495, 1024)。

我试过了:

features.iloc[0].values.reshape(32, 32)

但是,这仅适用于单行。像这样对整个数据框执行此操作:

features.values.reshape(32, 32)

导致以下错误:

ValueError: cannot reshape array of size 33274880 into shape (32,32)

关于如何实现这一点的任何想法?

【问题讨论】:

  • 请花时间阅读how to provide a great pandas example上的这篇文章并相应地修改您的问题
  • 添加了 numpy 标记,因为您实际上需要将它们作为最后的 numpy 数组。

标签: python pandas image numpy dataframe


【解决方案1】:

您可以从 DataFrame 中获取例如 numpy 数组,但问题是您无法为 DataFrame 提供排名为 3 的 numpy 数组。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(10, 9))
arr = df.values
arr = np.reshape(arr, (10, 3, 3))

这一步会失败:

df = pd.DataFrame(arr)

另一个答案最后提供了 numpy 数组,而不是 DataFrame。

【讨论】:

  • 实际上,我忘记在问题中指定这一点,但我确实需要来自 DataFrame 的 numpy 数组。对于那个很抱歉。感谢您抽出宝贵时间回答!
  • 当然,没问题,numpy 数组非常适合这个,甚至你可以在 TensorFlow 中将它们转换为张量。然后我将添加numpy标签。
【解决方案2】:

您需要传递必须重塑的行数,如下所示:

my_df = pd.DataFrame(np.zeros((32495,1024)))
my_df.shape
>> (32495, 1024)

reshaped_array = my_df.values.reshape(32495, 32, 32)
reshaped_array.shape
>> (32495, 32, 32)

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2019-04-18
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    相关资源
    最近更新 更多