我有这个带有 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/