如何在Python中将pandas DataFrame列按固定字符长度拆分为多列
解决方法
str.split是按指定分隔符拆分文本,不适合固定长度拆分的场景,你可以用str.findall配合正则实现需求,具体实现步骤如下:
- 第一步:先构造测试用的DataFrame(你自己的项目中可以跳过这步,直接用你已有的df即可)
import pandas as pd df = pd.DataFrame({ 'id': [1, 2], 'body': ['abcdefgh', 'xyzk'] })
- 第二步:执行拆分逻辑,按每3个字符为一块拆分
# 正则`.{1,3}`表示匹配1-3个任意字符,刚好符合固定长度拆分、最后不足3个也保留的需求 split_res = df['body'].str.findall(r'.{1,3}') # 把拆分得到的列表转为DataFrame,赋值给新列,fillna用于把空缺位置替换为空字符串 df[['body1', 'body2', 'body3']] = pd.DataFrame(split_res.tolist(), index=df.index).fillna('')
- 输出结果验证:执行后得到的df和你期望的效果完全一致:
id body body1 body2 body3 0 1 abcdefgh abc def gh 1 2 xyzk xyz k
备选实现:如果你提前确定了最多拆分的列数,也可以用
str.extract直接按分组提取,代码更简洁:df[['body1', 'body2', 'body3']] = df['body'].str.extract(r'(.{1,3})?(.{1,3})?(.{1,3})?').fillna('')
如果后续需要调整拆分的块长度,只需要把正则里的3改成你需要的长度即可,比如要每4个字符拆一块,就改成.{1,4}。
内容的提问来源于stack exchange,提问作者ozturkib
相关产品推荐
相关产品推荐

