将 CSV 读入 Pandas 后 MultiLabelBinarizer() 的格式问题

Posted

技术标签:

【中文标题】将 CSV 读入 Pandas 后 MultiLabelBinarizer() 的格式问题【英文标题】:Formatting issues with MultiLabelBinarizer() after reading CSV into Pandas 【发布时间】:2020-01-19 21:37:55 【问题描述】:

我想使用 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_)

它将每个字符视为一个单独的类,并且不再作为 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() 的功能?

【问题讨论】:

【参考方案1】:

添加.str.split(",")

mlb.fit_transform(df["Tag"].str.split(","))

【讨论】:

谢谢!我还需要去掉空格:mlb.fit_transform(df["Tag"].str.replace(" ","").str.split(","))

以上是关于将 CSV 读入 Pandas 后 MultiLabelBinarizer() 的格式问题的主要内容,如果未能解决你的问题,请参考以下文章

使用分块将 CSV 文件读入 Pandas 数据帧,生成单个目标数据帧

Pandas.read_csv 将所有文件读入一列

将 csv 读入 pandas 数据帧但避免 NaN 行

使用 Pandas 将 CSV 读入具有不同行长的数据帧

以内存有效的方式将大型 csv 读入稀疏的 pandas 数据帧

将当前工作目录中的所有 CSV 文件读入具有正确文件名的 pandas