[英]Split text in dataframe column to multiple columns
我有一个非常大的 dataframe,其中一列包含具有固定长度二进制数的字符串。
我想将每个二进制数字拆分为他自己的列,并且我有一个工作代码,但是速度非常慢。 我的代码是:
import numpy as np
import pandas as pd
#data generation
stringLength=5
stringFormat='{0:0'+str(stringLength)+'b}'
temp = [ stringFormat.format(x) for x in np.random.randint(0,high=2**stringLength, size=int(1e6))]
df=pd.DataFrame(temp,columns=['binaryString'])
#slow code below
df.attrs['Some data to preserve']=""
df,df.attrs = df.join(df['binaryString'].str.split('',expand=True).iloc[:, 1:-1].add_prefix('Bit').astype(np.uint8)), df.attrs
print(df)
可以做得更快吗?
我不能使用 Pandarallel,因为它需要“Linux 的 Windows 子系统”,我不能从 Visual Studio 运行它,但我可以使用另一个并行化。
从代码开始,关键点是:
df,df.attrs = df.join(df['binaryString'].str.split('',expand=True).iloc[:, 1:-1].add_prefix('Bit').astype(np.uint8)), df.attrs
它需要:每个循环 2.01 秒 ± 13.2 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)
我尝试了另一种方法:
df.join(pd.DataFrame(df['binaryString'].map(list).to_list(), columns=['a','b','c','d','e']))
这似乎很有希望,它需要:每个循环 468 毫秒 ± 4.58 毫秒(平均值 ± 标准偏差。7 次运行,每个循环 1 个)
我认为直接处理值(底层 numpy)可以更快地 go
OP 编辑(自动命名列):
df,df.attrs =df.join(pd.DataFrame(df['binaryString'].map(list).to_list()).add_prefix('Bit').astype(np.uint8)), df.attrs
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.