【问题标题】:Store array as a value within Pandas column将数组存储为 Pandas 列中的值
【发布时间】:2018-07-13 07:19:05
【问题描述】:

我有一个包含两列分类标签数据(NBA 球队名称)的数据集。我想要做的是使用一种热编码来生成一个二进制的一维向量作为代表每个团队的数组。这是我的代码:

from sklearn.preprocessing import MultiLabelBinarizer
one_hot_encoder = MultiLabelBinarizer()
table["Teams"] = one_hot_encoder.fit_transform(table["Teams"])

编码器正常工作,并相应地生成数组。换句话说,

one_hot_encoder.fit_transform(table["Teams"])

正确生成以下内容:

Link to encoder result screenshot

但是,当我尝试将数组存储到列中时,如下:

table["Teams"] = one_hot_encoder.fit_transform(table["Teams"])

似乎没有正确保存。

Link to data frame result screenshot

相反,该列似乎只是获取每个数组的第一个值,而不是存储整个数组。我该如何解决这个问题?

【问题讨论】:

  • 您可以粘贴您的示例数据而不是图像吗?

标签: python arrays pandas numpy dataframe


【解决方案1】:

我认为需要将2d 数组转换为lists:

table = pd.DataFrame({"Teams":list('aaasdffds')})

from sklearn.preprocessing import MultiLabelBinarizer
one_hot_encoder = MultiLabelBinarizer()

table["Teams"] = one_hot_encoder.fit_transform(table["Teams"]).tolist()
print (table)
          Teams
0  [1, 0, 0, 0]
1  [1, 0, 0, 0]
2  [1, 0, 0, 0]
3  [0, 0, 0, 1]
4  [0, 1, 0, 0]
5  [0, 0, 1, 0]
6  [0, 0, 1, 0]
7  [0, 1, 0, 0]
8  [0, 0, 0, 1]

但不建议将数组或列表存储到一列,因为不可能使用矢量化方法/函数,更好的是创建DataFrame

table = pd.DataFrame(one_hot_encoder.fit_transform(table["Teams"]), 
                     columns=one_hot_encoder.classes_)
print (table)

   a  d  f  s
0  1  0  0  0
1  1  0  0  0
2  1  0  0  0
3  0  0  0  1
4  0  1  0  0
5  0  0  1  0
6  0  0  1  0
7  0  1  0  0
8  0  0  0  1

【讨论】:

    【解决方案2】:

    意识到您需要在 DataFrame 中创建一个列表。您可以将数组存储为列表,pandas 不会修改它。

    from sklearn.preprocessing import MultiLabelBinarizer
    mlb = MultiLabelBinarizer()
    encoded_array = mlb.fit_transform(table['Teams'])
    table['Teams'] = [ [encoded_array [i,:]] for i in range(table.shape[0]) ]
    

    【讨论】:

    • OP 需要用数组填充的新列,所以你的问题不回答它。这只是推荐,与我的回答相同。
    猜你喜欢
    • 2022-11-24
    • 1970-01-01
    • 2019-05-03
    • 2013-11-03
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多