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

如何将Pandas DataFrame文本列转为单行并提取所有[*].[*]模式的数据?

Pandas文本提取问题解决方案

1. 将多行文本转换为单行

直接通过正则替换把所有换行、连续空白字符替换成单个空格,即可将列内容转为单行:

df['txt'] = df['txt'].str.replace('\s+', ' ', regex=True)

该操作会把原文本中的换行、多空格统一压缩成单个空格,让文本结构更规整,也能避免多行对正则匹配的干扰。

2. 提取所有符合[*].[*]模式的数据

你之前的正则\[.*\]是贪婪匹配,会从第一个[一直匹配到最后一个],导致只返回一个结果。需要改用精准匹配单个[xxx].[yyy]单元的正则:

df['matches'] = df['txt'].str.findall(r'\[[^\]]+\]\.\[[^\]]+\]').str.join(', ')

正则说明:

  • \[[^\]]+\]:匹配以[开头、]结尾的片段,[^\]]+确保只匹配到第一个],不会跨多个片段
  • \.\:匹配中间的.(正则中.是通配符,必须转义)

完整示例代码

import pandas as pd

df = pd.DataFrame({'txt': ["sample text  [EN1].[attrgs] 
            when x=1 then 1 
            else [EN2].[abc]  
            testing [EN3].[BUS]  WHERE [EN1].[attrgs] = abc"]})

# 转换为单行文本
df['txt'] = df['txt'].str.replace('\s+', ' ', regex=True)

# 提取所有匹配项
df['matches'] = df['txt'].str.findall(r'\[[^\]]+\]\.\[[^\]]+\]').str.join(', ')

# 可选:对匹配项去重
df['matches_unique'] = df['txt'].str.findall(r'\[[^\]]+\]\.\[[^\]]+\]').apply(set).str.join(', ')

print(df['matches'].iloc[0])
# 输出:[EN1].[attrgs], [EN2].[abc], [EN3].[BUS], [EN1].[attrgs]

print(df['matches_unique'].iloc[0])
# 输出:[EN1].[attrgs], [EN2].[abc], [EN3].[BUS]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:50:26