【问题标题】:How to replace only certain commas with dots in Pandas?如何在 Pandas 中仅用点替换某些逗号?
【发布时间】:2021-04-06 06:25:31
【问题描述】:

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

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

我尝试过使用:

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

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

【问题讨论】:

  • 你有多少列?它只是一个固定的 2 列数据框吗?

标签: python pandas replace data-cleaning


【解决方案1】:

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

s = pd.Series(['40,910,27', '3,479.29', '34,561.09', '132,634,98'], dtype='string')
res = s.str.replace(',(\d+)$', r'.\1', 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】:
    1. 拆分字符串以 2 位数字结尾,使用 () 保留拆分伙伴。
    2. 用'.'加入拆分列表
    3. 去掉字符串'.'最后。
    (s.str.split('[.,](\d{2})$')
         .str.join('.')
         .str.strip('.'))
    

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 2016-09-05
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多