如何从字符串中删除某些符号?

时间:2019-02-25 20:38:55

标签: python regex pandas

我在使用正则表达式时遇到一些问题。我有一个包含金额的数据集,并且在某些行中有一个奇数分隔符。而且我需要一个正则表达式来仅删除奇数分隔符。

例如,这是我拥有的数据:

user_id sum
1       10.10
2       154.24
3       19.565.02
4       2.142.00

预期结果是:

user_id sum
1       10.10
2       154.24
3       19565.02
4       2142.00
5       1.99

我使用python和pandas lib进行数据分析。

请帮助使用正则表达式。谢谢!

2 个答案:

答案 0 :(得分:3)

好吧,如果您的数据的末尾有2个小数位,则可以跳过正则表达式,而只使用python。

例如,假设您将所有数据放入列表(取反标题行),则可以执行以下操作来修复数据集:

dirty = ['10.10', '154.24', '19.565.02', '2.142.00', '1.99']
# this is a list comprehension that replaces the any '.' with '' in all
# but the last three characters of your strings
clean = [item[:-3].replace('.', '') + item[-3:] for item in dirty]

>>> clean
['10.10', '154.24', '19565.02', '2142.00', '1.99']

通过@match更新了答案。

答案 1 :(得分:1)

使用np.where模块中的numpy创建条件列的方式略有不同:

df['sum'] = np.where(df.sum_col.str.count('\.') >= 2, df.sum_col.str.replace('.', '', 1), df.sum_col )

或任意数量的.

df['sum'] = pd.to_numeric([i.replace('.','',x) for i,x in 
                           zip(df['sum'],df['sum'].str.count('\.')-1)])

返回:

    sum_col     sum
0   10.10       10.10
1   154.24      154.24
2   19.565.02   19565.02
3   2.142.00    2142.00

sum列是清理列