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 如何在字符串中的每个数字后加上逗号的主要内容,如果未能解决你的问题,请参考以下文章
如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改
python pandas中如何将dataframe中的一列字符串类型转换为浮点类型?
Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?