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

如何在Pandas拆分字符串列表值时保留含逗号的特定值?

解决DataFrame中特定含逗号字符串不拆分的问题

问题场景

需要将原始DataFrame的「Select activity」列拆分后转为新行,但其中Nothing, just walking这个含逗号的字符串需保持完整,不能被拆分。原始DataFrame如下:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Ann', 'Mark', 'John'],
    'Age': [25, 30, 41],
    'Select activity': ['Cycling, Running', 'Nothing, just walking', 'Cycling, Running, Swimming'],
    'Profession': ['Saleswoman', 'Manager', 'Accountant']
})

之前使用的代码会错误拆分Nothing, just walking:

df_new = df.loc[:, ['Name', 'Age']]
df_new['Activity'] = df['Select activity'].str.split(', ')
df_new = df_new.explode('Activity').reset_index(drop=True)

得到的错误结果:

Name  Age          Activity
0    Ann   25           Cycling
1    Ann   25           Running
2   Mark   30           Nothing
3   Mark   30     just walking
4   John   41           Cycling
5   John   41           Running
6   John   41          Swimming

添加的if df['Select activity'].isin(['Nothing, just walking']) is False:语句报错,因为isin返回的是布尔Series,不能直接用is False判断整个Series的真假。

可行解决方案

方法1:临时替换特殊字符串的分隔符

先把Nothing, just walking里的逗号替换成临时标记,拆分后再替换回来:

# 先替换特殊字符串里的逗号为临时分隔符
temp_col = df['Select activity'].replace('Nothing, just walking', 'Nothing|just walking', regex=False)
# 按逗号+空格拆分
df_new = df.loc[:, ['Name', 'Age']].assign(Activity=temp_col.str.split(', '))
# 拆分后把临时分隔符换回逗号
df_new['Activity'] = df_new['Activity'].apply(lambda x: [s.replace('|', ', ') for s in x])
# 展开成行
df_new = df_new.explode('Activity').reset_index(drop=True)

运行后得到正确结果:

Name  Age          Activity
0    Ann   25           Cycling
1    Ann   25           Running
2   Mark   30  Nothing, just walking
3   John   41           Cycling
4   John   41           Running
5   John   41          Swimming

方法2:使用正则表达式精准拆分

利用正则的负向断言,只拆分不在Nothing后面的逗号+空格:

# 正则匹配:匹配逗号+空格,但前面不是"Nothing"
df_new = df.loc[:, ['Name', 'Age']].assign(Activity=df['Select activity'].str.split(r'(?<!Nothing), '))
df_new = df_new.explode('Activity').reset_index(drop=True)

这个方法更简洁,直接通过正则避免拆分目标字符串里的逗号。

方法3:自定义apply函数处理

逐行判断字符串,遇到目标字符串就不拆分,其他正常拆分:

def split_activity(s):
    if s == 'Nothing, just walking':
        return [s]
    else:
        return s.split(', ')

df_new = df.loc[:, ['Name', 'Age']].assign(Activity=df['Select activity'].apply(split_activity))
df_new = df_new.explode('Activity').reset_index(drop=True)

这种方法逻辑直观,适合需要处理多个特殊字符串的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 23:30:47