将 CSV 读入 Pandas 后,MultiLabelBinarizer() 出现格式化问题
Formatting issues with MultiLabelBinarizer() after reading CSV into Pandas
我想使用 MultiLabelBinarizer() 准备一个包含适用于文本的标签的列。例如,根据 title 预测电影可能属于哪些类型。
MultiLabelBinarizer() 在值被预定义为 DataFrame 中的列表时效果很好:
import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
df = pd.DataFrame({"Text": ["Blah blah", "Blah blah blah"],
"Tag": [["Hi", "Hello"], ["Hey"]]})
mlb = MultiLabelBinarizer()
print(mlb.fit_transform(df["Tag"]))
print(mlb.classes_)
给予
array([[1, 0, 1],
[0, 1, 0]])
array(['Hello', 'Hey', 'Hi'], dtype=object)
但是,当我将 CSV 或 Excel 文件读入 Pandas 时,这种方法失败了。例如,如果我制作一个具有相同结构的简单 CSV:
并将其读入 Pandas + 使用 MultiLabelBinarizer():
df = pd.read_csv(filepath)
mlb = MultiLabelBinarizer()
print(mlb.fit_transform(df["Tag"]))
print(mlb.classes_)
它将每个字符视为一个单独的 class 并且不再输出为 array():
[[1 1 1 1 1 1 1 1 0]
[0 1 0 1 1 0 0 0 1]]
[' ' '"' ',' 'H' 'e' 'i' 'l' 'o' 'y']
鉴于此限制,我如何从 CSV 或 Excel 文件中读取并保留 MultiLabelBinarizer() 的功能?
添加 .str.split(",")
mlb.fit_transform(df["Tag"].str.split(","))
我想使用 MultiLabelBinarizer() 准备一个包含适用于文本的标签的列。例如,根据 title 预测电影可能属于哪些类型。
MultiLabelBinarizer() 在值被预定义为 DataFrame 中的列表时效果很好:
import pandas as pd
from sklearn.preprocessing import MultiLabelBinarizer
df = pd.DataFrame({"Text": ["Blah blah", "Blah blah blah"],
"Tag": [["Hi", "Hello"], ["Hey"]]})
mlb = MultiLabelBinarizer()
print(mlb.fit_transform(df["Tag"]))
print(mlb.classes_)
给予
array([[1, 0, 1],
[0, 1, 0]])
array(['Hello', 'Hey', 'Hi'], dtype=object)
但是,当我将 CSV 或 Excel 文件读入 Pandas 时,这种方法失败了。例如,如果我制作一个具有相同结构的简单 CSV:
并将其读入 Pandas + 使用 MultiLabelBinarizer():
df = pd.read_csv(filepath)
mlb = MultiLabelBinarizer()
print(mlb.fit_transform(df["Tag"]))
print(mlb.classes_)
它将每个字符视为一个单独的 class 并且不再输出为 array():
[[1 1 1 1 1 1 1 1 0]
[0 1 0 1 1 0 0 0 1]]
[' ' '"' ',' 'H' 'e' 'i' 'l' 'o' 'y']
鉴于此限制,我如何从 CSV 或 Excel 文件中读取并保留 MultiLabelBinarizer() 的功能?
添加 .str.split(",")
mlb.fit_transform(df["Tag"].str.split(","))