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

在Pandas中按问号(?)拆分列并筛选含问号行的求助

问题解决方法

1. 筛选包含问号的行

你的str.contains("?")无法正常工作,是因为?在正则表达式里是特殊元字符(表示匹配前一个字符0或1次),需要转义或者关闭正则匹配模式:

  • 方法一(转义正则):
filtered_data = data[data['url'].str.contains(r"\?")]
  • 方法二(关闭正则模式):
filtered_data = data[data['url'].str.contains("?", regex=False)]

2. 按问号拆分URL为两列

你原来的data['url'].str.split('?')[1]错误在于直接对整个Series取索引,而不是对每个字符串元素的拆分结果取索引。正确的做法有两种:

方法一:直接拆分并展开为新列

先筛选目标行,再用expand=True把拆分结果直接转换成两列:

# 先筛选
filtered_data = data[data['url'].str.contains("?", regex=False)]
# 拆分,n=1确保只按第一个问号拆分(避免多个问号的情况)
filtered_data[['path', 'params']] = filtered_data['url'].str.split('?', expand=True, n=1)

方法二:逐个提取拆分后的部分

如果不需要直接生成新列,也可以单独提取每个部分:

# 提取问号前的路径
filtered_data['path'] = filtered_data['url'].str.split('?').str[0]
# 提取问号后的参数
filtered_data['params'] = filtered_data['url'].str.split('?').str[1]

完整示例代码

假设你的DataFrame是data,列名为url,完整流程代码如下:

import pandas as pd

# 示例数据
data = pd.DataFrame({'url': ['/a/b/c?abc=0', 'd/e/f', '/x/y/z?foo=1&bar=2']})

# 筛选含问号的行
filtered_data = data[data['url'].str.contains("?", regex=False)]

# 拆分生成新列
filtered_data[['path', 'params']] = filtered_data['url'].str.split('?', expand=True, n=1)

print(filtered_data)

运行后输出:

url       path       params
0  /a/b/c?abc=0  /a/b/c      abc=0
2  /x/y/z?foo=1&bar=2  /x/y/z  foo=1&bar=2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:56:09