python - 从 Pandas Dataframe Column 中删除重复的逗号换句话说,我只需要列中的文本用逗号分隔它们

标签 python regex pandas text

我有这个带有 Text 的数据框柱子


文本
清洁柱


, , , 苹果 , , , 努力工作 , ,
苹果,努力工作

, , , , , , , , 苹果 , , , , ,
苹果

苹果, , 西瓜, , , , , ,
苹果、西瓜

, , , , , , , , , , , , , , , , ,



我想创建一个列,例如 Cleaned Col基本上使用正则表达式。
我看着不同的模式,比如这个 r'\s*,*([^(a-zA-Z)]*)'但我没有得到正确的结果。

最佳答案

由于您的字段以逗号分隔,因此您可以使用

# If the fields CANNOT contain whitespace:
df['Cleaned Col'] = df['Text'].str.findall(r'[^\s,]+').str.join(', ')

# If the fields can contain whitespace:
df['Cleaned Col'] = df['Text'].str.findall(r'[^\s,](?:[^,]*[^\s,])?').str.join(', ')
正则表达式提取所有找到的匹配项和 .str.join(', ')将结果列表项连接成单个字符串。正则表达式 ( see its demo ) 表示:
  • [^\s,]+ - 除空格和逗号之外的一个或多个字符
  • [^\s,] - 除空格和逗号之外的单个字符
  • (?:[^,]*[^\s,])? - 可选出现的任何零个或多个字符(逗号除外),然后是空格和逗号以外的字符。

  • 如果你的逗号用空格填充并且你真的想使用 Series.str.replace ,你可以使用
    df['Cleaned Col'] = df['Text'].str.replace(r'^[\s,]+|[\s,]+$|(\s)*(,)[\s,]*', r'\2\1', regex=True)
    
    this regex demo .
    细节:
  • ^[\s,]+ - 字符串开头的一个或多个空格或逗号
  • [\s,]+$ - 字符串末尾的一个或多个空格或逗号
  • (\s)*(,)[\s,]* - 零个或多个空格(最后一个匹配的保留在第 1 组中, \1 ),然后是逗号(捕获到第 2 组中, \2 ),然后是零个或多个空格或逗号字符。

  • 替换为第 2 组 + 第 1 组值。

    关于python - 从 Pandas Dataframe Column 中删除重复的逗号换句话说,我只需要列中的文本用逗号分隔它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69401752/

    相关文章:

    python - 如何停用 sklearn TfidfVectorizer 的默认停用词功能

    python - 如何将 Azure Function 绑定(bind)到 Python 中的 blob 容器?

    带有正则表达式的 Java IllegalStateException

    python - Pandas 数据框中以相同字符串开头的列的总和值

    python - 根据列名从另一个 DataFrame 填充 Pandas DataFrame

    python - 将 "informal"月日索引转换为日期时间索引

    python - 如何从 Python 3 中的双端队列获取 random.sample()?

    python - 重新引发 Python 异常并保留堆栈跟踪

    php - 删除双方括号并保留字符串

    java - 从字符串中解析 double