Pandas Python Regex : error: nothing to repeat
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)
或使用字符class:
football.replace([*-], '0.00', regex=True).astype(np.float64)
做
football.replace(['*','-'], ['0.00','0.00'], regex=False)
也就是说,对于只匹配一个或另一个字符的简单情况,不需要使用正则表达式;
或者如果你想使用正则表达式,请注意 *
是一个特殊字符;如果您想精确匹配 '*'
或 '-'
的值,请使用
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
。
我有一个包含几个奇怪字符“*”和“-”的数据框。
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)
或使用字符class:
football.replace([*-], '0.00', regex=True).astype(np.float64)
做
football.replace(['*','-'], ['0.00','0.00'], regex=False)
也就是说,对于只匹配一个或另一个字符的简单情况,不需要使用正则表达式;
或者如果你想使用正则表达式,请注意 *
是一个特殊字符;如果您想精确匹配 '*'
或 '-'
的值,请使用
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
。