我在CSV文件中有一列。每列中的每个单元格包含一个列表中的多个值。例如,一个单元格可能包含['A', 'B', 'C']
,而另一个可能包含['B', 'D']
。我想对这一列应用独热编码
,将其转换为二进制值,以便用于机器学习。
请告诉我如何做到这一点?
回答:
输入是CSV文件,因此没有列表,只有字符串。所以去掉[]
,并使用Series.str.get_dummies
,同时去除列名中的尾部'
:
df = df['col'].str.strip('[]').str.get_dummies(', ')df.columns = df.columns.str.strip("'")
如果需要一些处理来将字符串转换为列表,请使用MultiLabelBinarizer
以提高性能:
from sklearn.preprocessing import MultiLabelBinarizermlb = MultiLabelBinarizer()df = pd.DataFrame(mlb.fit_transform(df['col']),columns=mlb.classes_)print (df)