繁体   English   中英

将 dataframe 列中的文本拆分为多列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM