Series与DataFrame都提供replace方法。
Series
对Series进行数值替换
In [89]: ser = pd.Series([0., 1., 2., 3., 4.])
In [90]: ser.replace(0, 5)
Out[90]:
0 5.0
1 1.0
2 2.0
3 3.0
4 4.0
dtype: float64
或者使用其他列表替换当前列表
In [91]: ser.replace([0, 1, 2, 3, 4], [4, 3, 2, 1, 0])
Out[91]:
0 4.0
1 3.0
2 2.0
3 1.0
4 0.0
dtype: float64
可以指定dict进行替换
In [92]: ser.replace({0: 10, 1: 100})
Out[92]:
0 10.0
1 100.0
2 2.0
3 3.0
4 4.0
dtype: float64
对所有值进行按照缺失替换
In [95]: ser.replace([1, 2, 3], method='pad')
Out[95]:
0 0.0
1 0.0
2 0.0
3 0.0
4 4.0
dtype: float64
DataFrame
普通替换
替换单值
In [93]: df = pd.DataFrame({'a': [0, 1, 2, 3, 4], 'b': [5, 6, 7, 8, 9]})
In [94]: df.replace({'a': 0, 'b': 5}, 100)
Out[94]:
a b
0 100 100
1 1 6
2 2 7
3 3 8
4 4 9
通过字符串替换
In [96]: d = {'a': list(range(4)), 'b': list('ab..'), 'c': ['a', 'b', np.nan, 'd']}
In [97]: df = pd.DataFrame(d)
In [98]: df.replace('.', np.nan)
Out[98]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d
只搜索某列进行替换
In [102]: df.replace({'b': '.'}, {'b': np.nan})
Out[102]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d
正则表达式替换
使用正则表达式替换周围的空格
In [99]: df.replace(r'\s*\.\s*', np.nan, regex=True)
Out[99]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d
替换多个值
In [100]: df.replace(['a', '.'], ['b', np.nan])
Out[100]:
a b c
0 0 b b
1 1 b b
2 2 NaN NaN
3 3 NaN d
使用regex列表对搜索值替换
In [101]: df.replace([r'\.', r'(a)'], ['dot', '\1stuff'], regex=True)
Out[101]:
a b c
0 0 stuff stuff
1 1 b b
2 2 dot NaN
3 3 dot d
只搜索某列替换
In [103]: df.replace({'b': r'\s*\.\s*'}, {'b': np.nan}, regex=True)
Out[103]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d