如何在 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+)$'
表示匹配逗号后跟一组数字直到字符串末尾。
替换:
'.'
一个点和第一个捕获组(即最后一个逗号后的组数字)
- 拆分字符串以 2 位结束,使用
()
保留拆分伙伴左侧。
- 使用'.'加入拆分列表
- 去除字符串“.”最后。
(s.str.split('[.,](\d{2})$')
.str.join('.')
.str.strip('.'))
我在 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+)$'
表示匹配逗号后跟一组数字直到字符串末尾。
替换:
'.'
一个点和第一个捕获组(即最后一个逗号后的组数字)
- 拆分字符串以 2 位结束,使用
()
保留拆分伙伴左侧。 - 使用'.'加入拆分列表
- 去除字符串“.”最后。
(s.str.split('[.,](\d{2})$')
.str.join('.')
.str.strip('.'))