我有一個不統一的串列如下:
[['E', 'A', 'P'],
['E', 'A', 'X', 'P'],
['E', 'A', 'P'],
['P'],
['E', 'A', 'X', 'P'],
['E', 'A', 'P'],
['A', 'X', 'P'],
['E', 'A', 'P'],
['E', 'A', 'P'],
['E', 'A', 'X', 'P'],
['E', 'A', 'P'],
['E', 'A', 'P'],
['A', 'X', 'P'],
我想從中創建一個資料框,其中每一列代表四個可能的字母"E", "A","X"并"p"以單熱編碼的方式 - 最有效的方法是什么?
uj5u.com熱心網友回復:
我會推薦MultiLabelBinarizer從sklearn
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform(l),columns=mlb.classes_)
Out[170]:
A E P X
0 1 1 1 0
1 1 1 1 1
2 1 1 1 0
3 0 0 1 0
4 1 1 1 1
5 1 1 1 0
6 1 0 1 1
7 1 1 1 0
8 1 1 1 0
9 1 1 1 1
10 1 1 1 0
11 1 1 1 0
12 1 0 1 1
或者我們嘗試用 pandas 方式explode和str.get_dummies
df = pd.Series(l).explode().str.get_dummies().groupby(level=0).sum()
Out[176]:
A E P X
0 1 1 1 0
1 1 1 1 1
2 1 1 1 0
3 0 0 1 0
4 1 1 1 1
5 1 1 1 0
6 1 0 1 1
7 1 1 1 0
8 1 1 1 0
9 1 1 1 1
10 1 1 1 0
11 1 1 1 0
12 1 0 1 1
注意l是你list在這里
uj5u.com熱心網友回復:
嘗試:
lst = [
["E", "A", "P"],
["E", "A", "X", "P"],
["E", "A", "P"],
["P"],
["E", "A", "X", "P"],
["E", "A", "P"],
["A", "X", "P"],
["E", "A", "P"],
["E", "A", "P"],
["E", "A", "X", "P"],
["E", "A", "P"],
["E", "A", "P"],
["A", "X", "P"],
]
df = pd.DataFrame({v: 1 for v in l} for l in lst).notna().astype(int)
print(df)
印刷:
E A P X
0 1 1 1 0
1 1 1 1 1
2 1 1 1 0
3 0 0 1 0
4 1 1 1 1
5 1 1 1 0
6 0 1 1 1
7 1 1 1 0
8 1 1 1 0
9 1 1 1 1
10 1 1 1 0
11 1 1 1 0
12 0 1 1 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535593.html
下一篇:更改資料框的格式
