gpt4 book ai didi

python - 如何对 pandas 列中的列表执行一次热编码?

转载 作者:太空狗 更新时间:2023-10-30 01:56:21 25 4
gpt4 key购买 nike

假设我有一个数据框,其中一列是一个列表(具有未知的值和长度),例如:

df = pd.DataFrame(
{'messageLabels': [['Good', 'Other', 'Bad'],['Bad','Terrible']]}
)

我遇到了这个解决方案,但它不是我要找的。 How best to extract a Pandas column containing lists or tuples into multiple columns

理论上生成的 df 看起来像

messageLabels             | Good| Other| Bad| Terrible
--------------------------------------------------------
['Good', 'Other', 'Bad'] | True| True |True| False
--------------------------------------------------------
['Bad','Terrible'] |False|False |True| True

见上文

最佳答案

简洁

df.join(df.messageLabels.str.join('|').str.get_dummies().astype(bool))

messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True

sklearn

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
dum = mlb.fit_transform(df.messageLabels)

df.join(pd.DataFrame(dum.astype(bool), df.index, mlb.classes_))

messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True

过度

n = len(df)
i = np.arange(n)
l = [*map(len, df.messageLabels)]
j, u = pd.factorize(np.concatenate(df.messageLabels))

o = np.zeros((n, len(u)), bool)
o[i.repeat(l), j] = True

df.join(pd.DataFrame(o, df.index, u))

messageLabels Good Other Bad Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] False False True True

乱搞

并受到 Andy 的启发

df.join(pd.DataFrame([dict.fromkeys(x, True) for x in df.messageLabels]).fillna(False))

messageLabels Bad Good Other Terrible
0 [Good, Other, Bad] True True True False
1 [Bad, Terrible] True False False True

关于python - 如何对 pandas 列中的列表执行一次热编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56298815/

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