如何在 Pandas 中仅用点替换某些逗号?

How to replace only certain commas with dots in Pandas?

我在 Pandas DataFrame 的一列中有一些数据,其中一些数字有千分之一的逗号,以及欧式小数点逗号。例如:

40,910,27
3,479.29
34,561.09
132,634,98

我试过使用:

df['Orders'] = df['Orders'].replace(to_replace = ',', value = '.', regex = True)

但问题是,这显然用点替换了所有逗号,所以一些数字最终有两个点。有没有办法只删除非十进制逗号,并用点替换实际的十进制逗号?

IIUC,你只需要替换最后一个逗号,所以你可以这样做:

s = pd.Series(['40,910,27', '3,479.29', '34,561.09', '132,634,98'], dtype='string')
res = s.str.replace(',(\d+)$', r'.', regex=True)
print(res)

输出

0     40,910.27
1      3,479.29
2     34,561.09
3    132,634.98
dtype: string

正则表达式:

  • ',(\d+)$' 表示匹配逗号后跟一组数字直到字符串末尾。

替换:

  • '.'一个点和第一个捕获组(即最后一个逗号后的组数字)
  1. 拆分字符串以 2 位结束,使用 () 保留拆分伙伴左侧。
  2. 使用'.'加入拆分列表
  3. 去除字符串“.”最后。
(s.str.split('[.,](\d{2})$')
     .str.join('.')
     .str.strip('.'))