在Pandas中,我有一个Excel文件(称为Data),有12列,在第7列(称为Operations)中,每行有许多字符串(有些重复),由逗号和空格分隔,但有一些字符串仅由空格分隔,我想留在一起(stringA,我的字符串,B我的字符串C,等等)。
我需要创建一个列表或类似的东西,并将每个唯一的字符串转换为二进制,如
我怎么能做到这一点?我已经尝试了这么多的代码,但没有工作。提前感谢
wvt8vs2t1#
使用str.get_dummies。如果分隔符始终为<comma><space>:
str.get_dummies
<comma><space>
out = df.join(df['Column 7th'].str.get_dummies(sep=r', '))
否则,将其与str.replace组合:
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
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())
2条答案
按热度按时间wvt8vs2t1#
使用
str.get_dummies
。如果分隔符始终为
<comma><space>
:否则,将其与
str.replace
组合:输出:
sqougxex2#
我会做的是,首先将该列转换为列表。你可以使用appy或iterrow创建函数。
一旦它是一个列表,你可以应用它。
另一个选择是这样做,但它可能会更慢。