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

Python3 pandas如何保留所有以#开头的字符并移除其余字符

pandas提取文本中所有#开头内容的实现方法

核心逻辑

不用写复杂的逐字符遍历逻辑,用正则批量匹配+pandas原生字符串处理接口就能实现,性能比手写循环高很多:

  • 用正则匹配所有以#为前缀的连续字符段
  • 调用pandas Series的str.findall方法批量提取每行所有匹配结果
  • 把提取到的结果拼接成目标格式,无关内容会被直接丢弃

可直接运行的代码示例

import pandas as pd
import re

# 这里替换成你自己的数据源读取逻辑,比如pd.read_excel、pd.read_csv
df = pd.DataFrame({
    "文本列": [
        "今日探店 #火锅 #美食打卡 等位等了半小时但是味道真的绝",
        "加班到九点 #打工日记 下班路上买了束花",
        "这条内容没有加任何话题标签",
        "#学习笔记 #Pandas 文本处理技巧get 再也不用写循环了"
    ]
})

# 正则规则说明:
# 适配中文标签用r'#[^\s#]+':匹配#开头,直到遇到空格/下一个#为止的所有内容
# 仅匹配英文/数字/下划线标签用r'#\w+'
match_pattern = r'#[^\s#]+'

# 提取标签并拼接成空格分隔的字符串,赋值到新列/原列都可以
df["提取结果"] = df["文本列"].str.findall(match_pattern).apply(lambda tag_list: ' '.join(tag_list))

# 打印查看结果
print(df[["提取结果"]])

常见调整点

  • 如果需要用其他符号分隔标签,把' '.join(tag_list)里的空格换成目标符号就行,比如用逗号分隔就写','.join(tag_list)
  • 没有任何#开头内容的行,处理后会返回空字符串,不需要额外做空值处理
  • 如果要直接覆盖原列内容,把赋值对象改成你原来的文本列名即可

处理后所有不带#前缀的无关字符都会被完全过滤,最终结果仅保留所有#开头的内容,匹配预期输出要求。

内容的提问来源于stack exchange,提问作者Mr.Bean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:48:15