首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将dataframe列中的文本拆分为多列

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

Stack Overflow用户
提问于 2021-04-15 07:00:28
回答 1查看 55关注 0票数 0

我有一个非常大的dataframe,有一个列有字符串和一个固定长度的二进制数。

我想把每一个二进制数字分割成他自己的列,我有一个工作代码,但速度非常慢。我的代码是:

代码语言:javascript
复制
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运行它,但是我可以使用另一个并行化。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-15 07:23:19

从代码开始,关键点是:

代码语言:javascript
复制
df,df.attrs = df.join(df['binaryString'].str.split('',expand=True).iloc[:, 1:-1].add_prefix('Bit').astype(np.uint8)), df.attrs

平均每环2.01 s±13.2ms(平均±std )。dev.7次运行,每一次循环1次)

我尝试过另一种方法:

代码语言:javascript
复制
df.join(pd.DataFrame(df['binaryString'].map(list).to_list(), columns=['a','b','c','d','e']))

这似乎很有希望,它需要: 468 ms±4.58ms/圈(平均±std )。dev.7次运行,每一次循环1次)

我认为直接处理值(底层的numpy)可以更快一些。

OP编辑(自动命名列):

代码语言:javascript
复制
df,df.attrs =df.join(pd.DataFrame(df['binaryString'].map(list).to_list()).add_prefix('Bit').astype(np.uint8)), df.attrs
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67103668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档