很多情况下,我们想把一些值替换成其他值,这里可以用pandas中replace()实现.
In [102]: ser = pd.Series([0., 1., 2., 3., 4.])
#单个值的替换
In [103]: ser.replace(0, 5) # 把0替换成5
Out[103]:
0 5.0
1 1.0
2 2.0
3 3.0
4 4.0
dtype: float64
#一组值(list)的替换
In [104]: ser.replace([0, 1, 2, 3, 4], [4, 3, 2, 1, 0]) # 把0,1,2,3,4依次替换成4,3,2,1,0
Out[104]:
0 4.0
1 3.0
2 2.0
3 1.0
4 0.0
dtype: float64
#字典(dict)的替换
In [105]: ser.replace({0: 10, 1: 100}) # 索引0对应的值替换为10,索引1对应的值替换为100
Out[105]:
0 10.0
1 100.0
2 2.0
3 3.0
4 4.0
dtype: float64
#把指定值当成缺失值,再进行填充
In [108]: ser.replace([1, 2, 3], method='pad') # 把1,2,3当成缺失值,再用上一个非空值进行填充.
Out[108]:
0 0.0
1 0.0
2 0.0
3 0.0
4 4.0
dtype: float64
In [106]: df = pd.DataFrame({'a': [0, 1, 2, 3, 4], 'b': [5, 6, 7, 8, 9]})
In [107]: df.replace({'a': 0, 'b': 5}, 100) # a列值为0的替换成100,b列值为5的替换成100.
#df.replace(0,100)
#df.replace(5,100)
Out[107]:
a b
0 100 100
1 1 6
2 2 7
3 3 8
4 4 9
#运用正则表达式进行替换
In [109]: d = {'a': list(range(4)), 'b': list('ab..'), 'c': ['a', 'b', np.nan, 'd']}
In [110]: df = pd.DataFrame(d)
In [112]: df.replace(r'\s*\.\s*', np.nan, regex=True)
Out[112]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d
#运用list进行替换
In [113]: df.replace(['a', '.'], ['b', np.nan]) # a替换为b,.替换为NaN
Out[113]:
a b c
0 0 b b
1 1 b b
2 2 NaN NaN
3 3 NaN d
#正则list形式的替换
In [114]: df.replace([r'\.', r'(a)'], ['dot', r'\1stuff'], regex=True) # .替换成dot,a替换成astuff
Out[114]:
a b c
0 0 astuff astuff
1 1 b b
2 2 dot NaN
3 3 dot d
#dict形式的替换
In [115]: df.replace({'b': '.'}, {'b': np.nan}) # 指定b列中的.替换成NaN
#df.replace({'b': r'\s*\.\s*'}, {'b': np.nan}, regex=True)与前者等同
Out[115]:
a b c
0 0 a a
1 1 b b
2 2 NaN NaN
3 3 NaN d
#嵌套dict
In [117]: df.replace({'b': {'b': r''}}, regex=True) # b列中的b替换成''
# df.replace(regex={'b': {r'\s*\.\s*': np.nan}}) b列中.替换成NaN
Out[117]:
a b c
0 0 a a
1 1 b
2 2 . NaN
3 3 . d
In [119]: df.replace({'b': r'\s*(\.)\s*'}, {'b': r'\1ty'}, regex=True) # b列中.替换成.ty
Out[119]:
a b c
0 0 a a
1 1 b b
2 2 .ty NaN
3 3 .ty d
In [120]: df.replace([r'\s*\.\s*', r'a|b'], np.nan, regex=True) # .,a,b替换成NaN
# df.replace(regex=[r'\s*\.\s*', r'a|b'], value=np.nan)与前者等同
Out[120]:
a b c
0 0 NaN NaN
1 1 NaN NaN
2 2 NaN NaN
3 3 NaN d