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

如何在Python Pandas DataFrame中删除字符串内[]包裹的内容?

在Pandas DataFrame中移除列字符串里[]包裹的时间段内容

问题分析

你之前用固定字符串的str.replace只能匹配特定日期的包裹内容,而且[]是正则表达式的特殊字符(代表字符集),直接写会导致匹配逻辑出错,出现残留符号的问题。要通用处理所有[]包裹的内容,优先用正则表达式的矢量化操作,比循环高效得多。

最优解决方案:正则表达式矢量化替换

直接用str.replace搭配正则表达式,一次性匹配并移除所有[]包裹的内容:

import pandas as pd

# 替换所有[]包裹的内容
df['Description_GLEntry'] = df['Description_GLEntry'].str.replace(r'\[[^\]]*\]', '', regex=True)
  • 正则说明:
    • r'\[':转义左方括号,匹配实际的[字符
    • [^\]]*:匹配任意数量的非]字符(确保只匹配到对应的右括号为止)
    • r'\]':转义右方括号,匹配实际的]字符
      整个正则会精准匹配从[开始到对应]结束的所有内容,替换为空字符串即可完全移除,不会残留多余符号。

若需使用函数+循环实现(不推荐,效率较低)

如果一定要用自定义函数结合循环的方式,可按以下步骤:

  1. 定义处理单个字符串的函数:
def remove_bracketed_segment(text):
    start_pos = text.find('[')
    # 循环处理所有嵌套或多个[]的情况
    while start_pos != -1:
        end_pos = text.find(']', start_pos)
        if end_pos != -1:
            # 截取并拼接去掉[]包裹部分的文本
            text = text[:start_pos] + text[end_pos+1:]
            start_pos = text.find('[')
        else:
            # 没有匹配的右括号,终止循环
            break
    # 去除可能的多余空格
    return text.strip()
  1. 应用到DataFrame列:
# 方法1:使用apply(比直接循环高效)
df['Description_GLEntry'] = df['Description_GLEntry'].apply(remove_bracketed_segment)

# 方法2:逐行循环(仅小数据集推荐)
for index in df.index:
    df.loc[index, 'Description_GLEntry'] = remove_bracketed_segment(df.loc[index, 'Description_GLEntry'])

内容的提问来源于stack exchange,提问作者Jesper Holm-Pedersen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:32:32