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

如何在Pandas中拆分竖线分隔列以生成多行数据?

解决DataFrame含竖线列拆分多行的问题

首先说你遇到的str.contains('\\|', na=False)的问题:

  • 正则转义的小细节:竖线|是正则表达式里的特殊字符(表示“或”),所以需要转义。你用\\|是可行的(因为Python字符串里双反斜杠代表单个反斜杠),但更简洁不易出错的写法是用原始字符串:r'\|',这样不需要额外处理转义。
  • 空值处理的坑:你的df_wopipe = df[df['director'].str.contains('\\|')==False]会把director列为空值(NaN)的行直接排除掉——因为str.contains对NaN返回NaN,而NaN == False的结果是False,导致这些空值行既不在df_wpipe也不在df_wopipe里。如果要保留空值行,应该改成用取反操作+正确处理空值:
    df_wpipe = df[df['director'].str.contains(r'\|', na=False)]
    df_wopipe = df[~df['director'].str.contains(r'\|', na=True)]
    
    这里~表示取反,na=True让空值行被归类到“不含竖线”的分组里。

不过更关键的是:你原来的循环拆分方法效率极低(数据量大时会非常慢),而且最多只能处理100个分隔项,完全没必要这么写。Pandas有专门的方法来处理这种“把列表拆成多行”的需求,一步就能搞定:

方法一:用explode(推荐,Pandas 0.25+可用)

explode是Pandas专门为这种场景设计的函数,直接把列中的列表拆成多行,其他列的值自动重复:

import pandas as pd

# 先把director列按竖线拆分成列表(空值会保持为NaN,不会被拆成列表)
df['director'] = df['director'].str.split(r'\|')

# 拆分列表为多行,ignore_index=True重置索引
df_result = df.explode('director', ignore_index=True)

方法二:兼容旧版Pandas(低于0.25)

如果你的Pandas版本比较老,可以用set_index+stack的组合:

# 假设除了director列,其他列是col1、col3(根据你的实际列名调整)
df_result = df.set_index(['col1', 'col3'])['director'] \
              .str.split(r'\|', expand=True) \
              .stack() \
              .reset_index(name='director') \
              .drop('level_2', axis=1)

用这两种方法,不仅能正确处理空值和竖线拆分,还比循环写法高效得多,代码也更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:58:46