繁体   English   中英

Pandas Python Regex:错误:没有什么可重复的

[英]Pandas Python Regex : error: nothing to repeat

我有一个带有几个奇怪字符的数据框,“*”和“ - ”。

import pandas as pd
import numpy as np

data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
        'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions',     'Lions', 'Lions'],
        'wins': [11, '*', 10, '-', 11, 6, 10, 4],
        'losses': [5, 8, 6, 1, 5, 10, 6, 12]}
football = pd.DataFrame(data, columns=['year', 'team', 'wins', 'losses'])

我想用'0.00'替换奇怪的字符但我得到一个错误 -

error: nothing to repeat

我知道这与正则表达式有关,但我仍然不知道如何克服这个问题。

我用来替换字符的代码:

football.replace(['*','-'], ['0.00','0.00'], regex=True).astype(np.float64)

*是正则表达式中的特殊字符,你必须逃脱它:

football.replace(['\*','-'], ['0.00','0.00'], regex=True).astype(np.float64)

或使用字符类:

football.replace([*-], '0.00', regex=True).astype(np.float64)

football.replace(['*','-'], ['0.00','0.00'], regex=False)

也就是说,没有必要使用正则表达式来表示只匹配1个字符或另一个字符的简单情况;

或者如果你想使用正则表达式,请注意*是一个特殊字符; 如果您想要精确匹配'*''-' ,请使用

football.replace('^[*-]$', '0.00', regex=True)

你可以在字典理解中使用列表理解来做到这一点

>>> {key: [i if i not in {'*','-'} else '0.00' for i in values] for key, values in data.items()}
{'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
 'wins': [11, '0.00', 10, '0.00', 11, 6, 10, 4],
 'losses': [5, 8, 6, 1, 5, 10, 6, 12],
 'team': ['Bears', 'Bears', 'Bears', 'Packers', 'Packers', 'Lions', 'Lions', 'Lions']}

这样做是为了在制作DataFrame之前清理data

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM