我在使用正则表达式时遇到一些问题。我有一个包含金额的数据集,并且在某些行中有一个奇数分隔符。而且我需要一个正则表达式来仅删除奇数分隔符。
例如,这是我拥有的数据:
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进行数据分析。
请帮助使用正则表达式。谢谢!
答案 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
列是清理列