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
相关产品推荐
相关产品推荐

