Python/Pandas 如何在字符串中的每个数字后加上逗号

Posted

技术标签:

【中文标题】Python/Pandas 如何在字符串中的每个数字后加上逗号【英文标题】:Python/Pandas How to put comma after every number in a string 【发布时间】:2022-01-03 15:32:14 【问题描述】:

例如你有"blablabla 23423451, neemememem 5688234 hhojvz 3451, yoea"

输出应该是这样的"blablabla 2342345, neemememem 5688234, hhojvz 345, yoea"

如果已经有逗号,直接跳过

注意:数据框中的此类文本,有一堆。所以,理想情况下是熊猫。所有数字和文本都是唯一的(没有重复)。数字中的数字长度是随机的。

text
blablabla 2342345 neemememem 5688234 hhojvz 345 yoea
asdffgh 645655 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 ghhjfg 777777 hhojvz 345 ertert 698666666 neemememem 5688234 hhojvz 345 yoea
blablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla
5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoeablablabla 2342345 neemememem 5688234 hhojvz 345 yoea
blablabla 2342345 neemememem 5688234 hhojvz 345 yoea
sdf 2345

【问题讨论】:

数字后面的原始数据中可能有逗号吗? 是的,它可能在那里 【参考方案1】:

您可以使用正则表达式:

df['text'] = df['text'].str.replace(r'(\d+)(?!,)\b', r'\1,', regex=True)

它是如何工作的

(\d+) # capture digits
(?!,) # not followed by comma
\b    # ensure word boundary

替换为:捕获组 (\1) 和逗号

输出:

text
0                                                                                                                                                                                blablabla 2342345, neemememem 5688234, hhojvz 345, yoea
1                        asdffgh 645655, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, ghhjfg 777777, hhojvz 345, ertert 698666666, neemememem 5688234, hhojvz 345, yoea
2  blablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla
3                                         5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoeablablabla 2342345, neemememem 5688234, hhojvz 345, yoea
4                                                                                                                                                                                blablabla 2342345, neemememem 5688234, hhojvz 345, yoea
5                                                                                                                                                                                                                              sdf 2345,

替代正则表达式:(\d+)(?!,)(?!\d),这将删除单词边界上的条件并避免将'123,' 转换为'12,3,'

【讨论】:

完美答案,非常感谢。那些损坏的 csv 文件正在杀死我:) @AleksandrPay 我在想这会是这种用例;)

以上是关于Python/Pandas 如何在字符串中的每个数字后加上逗号的主要内容,如果未能解决你的问题,请参考以下文章

计算python pandas中的系列数

如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改

python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?

Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?

Python/Pandas:如何将字符串列表与 DataFrame 列匹配

python pandas-->str.strip()函数