提取字符串列中的所有唯一模式(Python、DF)
我正在从事一个制造业项目,其中每个订购项目的所有零件都有一个唯一的6位代码;有68000条记录。所有零件代码都放在一列中,放在一个字符串中,每个父字符串具有不同的长度: 我想知道是否有更简单的方法来分离这些字符串,将每个唯一的代码转换为一列,然后对父字符串中的列1(如果存在)和列0(如果不存在)进行编码提取字符串列中的所有唯一模式(Python、DF),python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我正在从事一个制造业项目,其中每个订购项目的所有零件都有一个唯一的6位代码;有68000条记录。所有零件代码都放在一列中,放在一个字符串中,每个父字符串具有不同的长度: 我想知道是否有更简单的方法来分离这些字符串,将每个唯一的代码转换为一列,然后对父字符串中的列1(如果存在)和列0(如果不存在)进行编码 AAX04X ABXN6X A5DB1X... 1 1 1 1 0 1 0 1 0
AAX04X ABXN6X A5DB1X...
1 1 1
1 0 1
0 1 0
...
以下是我到目前为止的情况,但运行起来需要很长时间:
line = df.column[0]
split = [line[i:i+6] for i in range(0,len(line),6)]
for r in range(0,len(df.column)):
new_line = df.column[r]
new_split = [new_line[i:i+6] for i in range(0,len(new_line),6)]
for code in new_split:
if code not in split:
split.append(code)
您可以使用
wrap
和split
将字符串拆分为6个字符的块,然后使用get\u dummies
进行一次热编码:
# generate some test data
df = pd.DataFrame({
's': [''.join(x) for x in np.random.choice(list('AB'), (100, 24))]
})
# split into 6-character chunks and one-hot encode them
df['s'].str.wrap(6).str.get_dummies('\n')
输出:
AAAAAA AAAAAB AAAABA AAAABB AAABAA AAABAB AAABBA AAABBB AABAAA \
0 0 0 0 0 0 1 0 0 0
1 0 0 0 0 0 0 0 0 0
2 0 0 1 0 0 0 1 0 0
3 0 0 0 0 0 0 0 0 1
4 0 0 0 0 0 1 0 0 0
.. ... ... ... ... ... ... ... ... ...
95 0 0 0 0 0 0 1 0 0
96 0 0 0 0 0 0 1 0 0
97 0 0 0 0 0 0 0 0 0
98 0 0 0 0 1 0 0 0 0
99 0 0 0 0 0 0 0 0 0
非常感谢。我现在正在执行你的建议;然而,由于有68000条记录,它需要相当长的时间才能运行。我会更新它一次completes@AnttonHammarskjold有趣。这些绳子有多长?我已经测试了100k字符串,每个字符串有24个字符,在我的笔记本电脑上运行大约30秒,效果很好,谢谢。每个字符串都是4500-5000个字符。