【问题标题】:Store python array in each entry of a column将python数组存储在列的每个条目中
【发布时间】:2021-10-31 01:07:08
【问题描述】:

我有一个数组“mutlilabel”,如下所示:

       [[0, 0, 0, 1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 1, 0, 0, 0, 0],
                  ...
       [0, 0, 0, 1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0]]

并希望在我面临多标签分类任务时将这些数组中的每一个存储在我的目标变量中。我怎样才能做到这一点?我的代码:

pd.DataFrame(multilabel)

输出多列:

0   1   2   3   4   5   6   7

0   0   0   0   0   1   0   0   0
1   1   0   0   0   0   0   0   0
2   1   0   0   0   0   0   0   0

提前致谢!

【问题讨论】:

  • 你是说你只是想让数据框有一个列,其中每个值的数组长度为 8?
  • 没错!我希望将其作为神经网络的目标变量

标签: python arrays pandas multidimensional-array


【解决方案1】:

您是否考虑过使用以下技巧?

import pandas as pd

arr =  [[0, 0, 0, 1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 1, 0, 0, 0, 0],
       [0, 0, 0, 1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0]]

pd.DataFrame([arr]).T

输出

                          0
0  [0, 0, 0, 1, 0, 0, 0, 0]
1  [1, 0, 0, 0, 0, 0, 0, 0]
2  [1, 0, 0, 1, 0, 0, 0, 0]
3  [0, 0, 0, 1, 0, 0, 0, 0]
4  [1, 0, 0, 0, 0, 0, 0, 0]

编辑 如果您使用numpy 数组,您可以使用以下

import numpy as np

pd.DataFrame(np.array(arr))\
  .apply(lambda x: np.array(x), axis=1)

【讨论】:

  • 对我不起作用!它只是将我的 8x1026 数组转换为一个数据框 od 1024x8
  • 那是@soulwreckedyouth,对不起
  • 可能数据在一个numpy数组中,而不是python列表中;这正是这个错误
  • 感谢吉里。 @soulwreckedyouth 作为未来参考尝试使用这些资源how-to-askmcve 提出问题。如果在您的问题中您使用列表而不是 numpy 数组,人们会尝试使用您提供的相同格式的数据来回答。
  • 对此感到抱歉。将来会这样做
【解决方案2】:
df = pd.DataFrame(list(multilabel))
list_column = df.apply(lambda row: row.values, axis=1)
pd.DataFrame(list_column, columns=['list_column'])

结果 df:

【讨论】:

  • 但是您不需要将您的多标签列表更改为 df 来训练您的 NN。
  • 我可以通过吗?我是 NN 的新手,尤其是 Huggingface 库及其 Dataset 对象。我必须将 train_test_split 拆分为 train_data 和 test_data 而不是 x_train/x_test/y_train/y_test 结构。这就是为什么我想将该多标签列表转换为数据框结构...
  • 来自 sklearn.model_selection.train_test_split:“允许的输入是列表、numpy 数组、scipy-sparse 矩阵或 pandas 数据帧。”
【解决方案3】:

所以,真正的问题是为什么……它似乎不是最有用的数据结构。

也就是说,pandas 中的一维数据类型是Series

>>> pd.Series(multilabel)
0    [0, 0, 0, 1, 0, 0, 0, 0]
1    [1, 0, 0, 0, 0, 0, 0, 0]
2    [1, 0, 0, 1, 0, 0, 0, 0]
3    [0, 0, 0, 1, 0, 0, 0, 0]
4    [1, 0, 0, 0, 0, 0, 0, 0]
dtype: object

然后您可以将其进一步转换为 DataFrame:

>>> pd.DataFrame(pd.Series(multilabel))
                          0
0  [0, 0, 0, 1, 0, 0, 0, 0]
1  [1, 0, 0, 0, 0, 0, 0, 0]
2  [1, 0, 0, 1, 0, 0, 0, 0]
3  [0, 0, 0, 1, 0, 0, 0, 0]
4  [1, 0, 0, 0, 0, 0, 0, 0]

编辑:根据进一步讨论,如果multilabel 是嵌套 Python 列表,则此方法有效,但如果它是 NumPy 数组则无效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-21
    • 2017-11-16
    • 1970-01-01
    • 2019-06-06
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多