You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas如何将固定长度拆分的列拼接为相邻块连字符格式多列

pandas按3字符分块拼接相邻块为多列的实现

问题场景

现有pandas列存储连续字符串,典型值为abcdefghi、abcdefghijkl、abcdefghijklmno这类长度为3的整数倍的字符串,需要输出多列,每列值为相邻两个3字符分块用-拼接的结果,对应关系如下:

  • 输入abcdefghi(长度9)输出2列:abc-def、def-ghi
  • 输入abcdefghijkl(长度12)输出3列:abc-def、def-ghi、ghi-jkl
  • 输入abcdefghijklmno(长度15)输出4列:abc-def、def-ghi、ghi-jkl、jkl-mno

当前已实现按3字符步长拆分字符串为独立分块,代码如下:

def split_chunk(txt, n=3):
    return [txt[i:i+n] for i in range(0, len(txt), n)]

df = pd.DataFrame(df.COLUMN.apply(split_chunk).to_list())

拆分后的结果每列存一个3字符分块,空值对应长度不足的行,示例:

行索引01234
0abcdefghiNaNNaN
1abcdefghijklNaN
2abcdefghijklNaN
3abcdefghijklmno
4abcdefghiNaNNaN
5abcdefghiNaNNaN

解决方案

方法1:直接在拆分阶段生成目标结果(推荐)

不需要先生成分块中间表,拆分后直接拼接相邻块,代码更简洁效率更高:

import pandas as pd

def split_to_pairs(txt, chunk_size=3):
    # 先按3字符拆分
    chunks = [txt[i:i+chunk_size] for i in range(0, len(txt), chunk_size)]
    # 相邻块拼接,块数为k时输出k-1个拼接结果
    return [f"{chunks[idx]}-{chunks[idx+1]}" for idx in range(len(chunks)-1)]

# 直接生成目标多列结果
res_df = pd.DataFrame(df['COLUMN'].apply(split_to_pairs).to_list())

方法2:基于已有的分块中间表处理

如果已经生成了存分块的中间DataFrame(假设命名为chunk_df),可以逐列滑动拼接相邻非空值:

res_df = pd.DataFrame()
col_count = chunk_df.shape[1]
for col_idx in range(col_count - 1):
    # 只取当前列和下一列都非空的行做拼接,自动跳过空值行
    valid_rows = chunk_df[[col_idx, col_idx+1]].dropna().index
    res_df.loc[valid_rows, col_idx] = chunk_df.loc[valid_rows, col_idx] + '-' + chunk_df.loc[valid_rows, col_idx+1]

两种方法最终输出结果完全匹配预期,示例如下:

行索引0123
0abc-defdef-ghiNaNNaN
1abc-defdef-ghighi-jklNaN
2abc-defdef-ghighi-jklNaN
3abc-defdef-ghighi-jkljkl-mno
4abc-defdef-ghiNaNNaN
5abc-defdef-ghiNaNNaN

补充:如果原字符串长度不是3的整数倍,末尾不足3字符的残块会自动被过滤,不会参与拼接,符合相邻等长分块配对的逻辑。

内容的提问来源于stack exchange,提问作者Glammy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:01:09