ult*_*ron 4 python string text dataframe pandas
我有一个 Pandas 数据框,看起来像这样:
text = ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx", "yz"]
labels = ["label_1, label_2",
"label_1, label_3, label_2",
"label_2, label_4",
"label_1, label_2, label_5",
"label_2, label_3",
"label_3, label_5, label_1, label_2",
"label_1, label_3"]
df = pd.DataFrame(dict(text=text, labels=labels))
df
text labels
0 abcd label_1, label_2
1 efgh label_1, label_3, label_2
2 ijkl label_2, label_4
3 mnop label_1, label_2, label_5
4 qrst label_2, label_3
5 uvwx label_3, label_5, label_1, label_2
6 yz label_1, label_3
Run Code Online (Sandbox Code Playgroud)
我想将数据框格式化为如下所示:
text label_1 label_2 label_3 label_4 label_5
abcd 1.0 1.0 0.0 0.0 0.0
efgh 1.0 1.0 1.0 0.0 0.0
ijkl 0.0 1.0 0.0 1.0 0.0
mnop 1.0 1.0 0.0 0.0 1.0
qrst 0.0 1.0 1.0 0.0 0.0
uvwx 1.0 1.0 1.0 0.0 1.0
yz 1.0 0.0 1.0 0.0 0.0
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?(我知道我可以通过执行类似的操作来拆分标签中的字符串并将它们转换为列表df.labels.str.split(",")
,但不确定如何从那里继续。
(所以基本上我想将标签列中的这些关键字转换为自己的列,并在它们出现如预期输出中所示时填写 1)
您可以使用pd.Series.str.get_dummies
并与该text
系列结合使用:
dummies = df['labels'].str.replace(' ', '').str.get_dummies(',')
res = df['text'].to_frame().join(dummies)
print(res)
text label_1 label_2 label_3 label_4 label_5
0 abcd 1 1 0 0 0
1 efgh 1 1 1 0 0
2 ijkl 0 1 0 1 0
3 mnop 1 1 0 0 1
4 qrst 0 1 1 0 0
5 uvwx 1 1 1 0 1
6 yz 1 0 1 0 0
Run Code Online (Sandbox Code Playgroud)