Pandas将字符串逗号分隔的列转换为二进制

toiithl6  于 2023-04-04  发布在  其他
关注(0)|答案(2)|浏览(127)

在Pandas中,我有一个Excel文件(称为Data),有12列,在第7列(称为Operations)中,每行有许多字符串(有些重复),由逗号和空格分隔,但有一些字符串仅由空格分隔,我想留在一起(stringA,我的字符串,B我的字符串C,等等)。

我需要创建一个列表或类似的东西,并将每个唯一的字符串转换为二进制,如

我怎么能做到这一点?我已经尝试了这么多的代码,但没有工作。提前感谢

wvt8vs2t

wvt8vs2t1#

使用str.get_dummies
如果分隔符始终为<comma><space>

out = df.join(df['Column 7th'].str.get_dummies(sep=r', '))

否则,将其与str.replace组合:

out = df.join(df['Column 7th']
              .str.replace(r',\s*', '|', regex=True)
              .str.get_dummies())

输出:

Column 7th  my string2  my string5  string1  string3  string4  string6
0  string1, my string2, string3           1           0        1        1        0        0
1  string4, my string5, string1           0           1        1        0        1        0
2  string6, string1, my string5           0           1        1        0        0        1
sqougxex

sqougxex2#

我会做的是,首先将该列转换为列表。你可以使用appy或iterrow创建函数。

my_list = my_string.split(",")

一旦它是一个列表,你可以应用它。

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer(sparse_output=True)

df = df.join(
            pd.DataFrame.sparse.from_spmatrix(
                mlb.fit_transform(df.pop('Column7th')),
                index=df.index,
                columns=mlb.classes_))

另一个选择是这样做,但它可能会更慢。

df.drop('Column7th', 1).join(df.Column7th.str.join('|').str.get_dummies())

相关问题