gpt4 book ai didi

python - 如何将 pandas DataFrame 转换为单热编码?

转载 作者:行者123 更新时间:2023-12-01 23:04:13 25 4
gpt4 key购买 nike

假设,我有一个包含百万行的 DataFrame。在这里,每一行代表一个购物者,每个单元格中的每个数字表示项目代码。数据库中大约有 250 个项目。一张玩具 table 如下图

import pandas as pd
import numpy as np

df = pd.DataFrame({'item1':[10, 10, 22, 89],
'item2':[15, 35, 33, 103],
'item3':[np.NaN, 65, 47, 41],
'item4':[np.NaN, np.NaN, 10, 22]})
df
<表类="s-表"><头>item1item2item3item4<正文>1015NaNNaN103565NaN22334710891034122

目标是将上面的表转换成一个单热编码表/DataFrame(每一行仍然代表一个购物者),例如

<表类="s-表"><头><日>1 <日>... <日>10 <日>... <日>15 <日>... <日>250 <正文>001...1...0001...0...0

因此,最终的数据框形状类似于 (1000000, 250)。有没有办法快速将 DataFrame 转换为 one-hot 编码表?

最佳答案

使用 sklearn 的 OneHotEncoder :

  • 设置 sparse=False 因为你想要密集的二维输出
  • fillna使用一些数值(例如 -1),然后删除该列
  • groupby.sum聚合重复的列(感谢 @enke )
from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(sparse=False)
e = encoder.fit_transform(df.fillna(-1))

out = pd.DataFrame(e,
columns=np.hstack(encoder.categories_).astype(int),
index=encoder.feature_names_in_,
dtype=int,
).drop(columns=[-1]).groupby(level=0, axis=1).sum()

输出:

        10   15   22   33   35   41   47   65   89   103
item1 1 1 0 0 0 0 0 0 0 0
item2 1 0 0 0 1 0 0 1 0 0
item3 1 0 1 1 0 0 1 0 0 0
item4 0 0 1 0 0 1 0 0 1 1

关于python - 如何将 pandas DataFrame 转换为单热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71268897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com