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

如何在Python中将空格分隔的列拆分为独立列?

Python实现竖线分隔列的空格元素拆分转换

嘿,这个需求我之前也碰到过,其实用Python的字符串处理或者pandas都能轻松搞定,分几种场景给你讲清楚:

场景1:普通空格拆分(所有空格都作为分隔符)

如果你的数据里没有带空格的整体字段(比如d s就是两个独立元素),直接用基础的字符串方法就行:

original_str = "a | a b c d s | e f g h f | i j k l"

# 第一步:按竖线分割并清理每个列的前后空格
columns = [col.strip() for col in original_str.split('|')]

# 第二步:遍历每个列,按空格拆分元素(过滤空字符串避免连续空格问题)
split_elements = []
for col in columns:
    elements = [elem.strip() for elem in col.split() if elem.strip()]
    split_elements.extend(elements)

# 第三步:用竖线连接所有拆分后的元素
result_str = ' | '.join(split_elements)
print(result_str)

运行后输出:

a | a | b | c | d | s | e | f | g | h | f | i | j | k | l

场景2:保留带空格的整体字段(比如用引号包裹的d s)

看你的示例里d s和h f是作为整体保留的,这种情况应该是原始数据里这些字段是用引号包裹的(只是你没写出来),这时候用shlex模块来拆分更靠谱,它能识别引号包裹的带空格元素:

import shlex

original_str = 'a | a b c "d s" | e f g "h f" | i j k l'

# 按竖线分割并清理空格
columns = [col.strip() for col in original_str.split('|')]

split_elements = []
for col in columns:
    # shlex.split会自动识别引号包裹的元素,保留内部空格
    elements = shlex.split(col)
    split_elements.extend(elements)

result_str = ' | '.join(split_elements)
print(result_str)

运行后输出正好和你的示例一致:

a | a | b | c | d s | e | f | g | h f | i | j | k | l

场景3:处理多行数据集(用pandas更高效)

如果你的数据是多行的数据集,用pandas处理会更方便,这里同样分两种情况:

普通空格拆分:

import pandas as pd

# 模拟多行数据
data = {'raw_data': [
    "a | a b c d s | e f g h f | i j k l",
    "x | x y z | m n | o p q r"
]}
df = pd.DataFrame(data)

# 先按竖线拆分原始列
df_split = df['raw_data'].str.split('|', expand=True).apply(lambda x: x.str.strip())

# 遍历每一列,拆分后合并成新的DataFrame
result_df = pd.DataFrame()
for col in df_split.columns:
    temp = df_split[col].str.split(expand=True)
    result_df = pd.concat([result_df, temp], axis=1)

# 把每行转成你要的竖线分隔格式
result_df['final_str'] = result_df.apply(lambda row: ' | '.join(row.dropna().tolist()), axis=1)
print(result_df['final_str'].tolist())

保留带空格的整体字段:

import pandas as pd
import shlex

data = {'raw_data': [
    'a | a b c "d s" | e f g "h f" | i j k l',
    'x | x y "z w" | m "n o" | p q'
]}
df = pd.DataFrame(data)

df_split = df['raw_data'].str.split('|', expand=True).apply(lambda x: x.str.strip())

result_df = pd.DataFrame()
for col in df_split.columns:
    # 用shlex拆分每个单元格的内容
    temp = df_split[col].apply(lambda x: pd.Series(shlex.split(x)))
    result_df = pd.concat([result_df, temp], axis=1)

result_df['final_str'] = result_df.apply(lambda row: ' | '.join(row.dropna().tolist()), axis=1)
print(result_df['final_str'].tolist())

这样不管是单行还是多行数据,都能完美实现你要的转换效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:49