Python中按分隔符拆分字符串并存储到DataFrame多列的方法
解决方案
单个字符串拆分
直接用split('->')只能得到单个节点的列表,要生成相邻节点对,得先拆分出所有节点,再将相邻节点拼接:
s = "A->B->C->D->E->F" nodes = s.split('->') # 用zip配对相邻节点,再拼接成目标格式 result = [f"{a}->{b}" for a, b in zip(nodes, nodes[1:])] # 输出: ['A->B', 'B->C', 'C->D', 'D->E', 'E->F']
DataFrame批量处理
假设你的DataFrame有一列名为path,按以下步骤生成对应新列:
- 定义拆分函数,处理单个路径字符串
- 对目标列应用函数,得到包含配对列表的Series
- 根据最长配对数生成对应新列,将列表展开为多列
完整代码示例
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'path': [ 'A->B->C->D->E->F', 'X->Y->Z', 'P->Q' ] }) # 定义拆分函数 def split_to_pairs(path_str): nodes = path_str.split('->') return [f"{prev}->{curr}" for prev, curr in zip(nodes, nodes[1:])] # 生成配对列表列 df['pairs_list'] = df['path'].apply(split_to_pairs) # 获取最大配对数量,确定新列数 max_pair_count = df['pairs_list'].str.len().max() # 将列表展开为多列,列名设为Pair_1、Pair_2... pair_columns = pd.DataFrame( df['pairs_list'].tolist(), columns=[f'Pair_{i+1}' for i in range(max_pair_count)] ) # 合并到原DataFrame并清理临时列 df = pd.concat([df, pair_columns], axis=1).drop('pairs_list', axis=1)
输出结果
| path | Pair_1 | Pair_2 | Pair_3 | Pair_4 | Pair_5 |
|---|---|---|---|---|---|
| A->B->C->D->E->F | A->B | B->C | C->D | D->E | E->F |
| X->Y->Z | X->Y | Y->Z | NaN | NaN | NaN |
| P->Q | P->Q | NaN | NaN | NaN | NaN |
内容的提问来源于stack exchange,提问作者Nivs
相关产品推荐
相关产品推荐

