看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
对数据处理时我们可以使用替换功能剔除我们不想要的,换成想要的内容。这在数据处理中经常使用,因为经过人工整理的数据往往不理想,需要进行替换操作。
以下一些金额数据,我们想去除货币符号,为后续转换为数字类型提供可能,因为非数字元素的字符无法转换为数字类型:
s = pd.Series(['12', '-$10', '$10,000'], dtype="string")
s.str.replace('$', '')
'''
0 12
1 -10
2 10,000
dtype: string
'''
# 如果需要数字类型还需要将逗号剔除
注意:两个基本的参数第一个是旧内容(希望被替换的已有内容)第二个是新内容(替换成的新内容)。
如果我们替换 -$
则发现不起作用,是因为替换字符默认是支持正则的(可以使用 regex=False
不支持),可以进行转义来实现。
s.str.replace('-$', '') # 不起作用
s.str.replace(r'-\$', '-') # 进行转义后正常
关闭正则支持:
(pd.Series(['foo', 'fuz', np.nan])
.str
.replace('f.', 'ba', regex=True) # 默认
)
'''
0 bao
1 baz
2 NaN
dtype: object
'''
# 不支持正则,不起作用,因为没有 f. 字符
(pd.Series(['foo', 'fuz', np.nan])
.str
.replace('f.', 'ba', regex=False)
)
替换内容可以可以使用函数进行复杂灵活的处理:
# 对内容反转
def repl(m):
return m.group(0)[::-1]
# 对字母内容进行替换
(pd.Series(['foo 123', 'bar baz', np.nan],
dtype="string")
.str.replace(r'[a-z]+', repl)
)
'''
0 oof 123
1 rab zab
2 <NA>
dtype: string
'''
使用 lambda:
# 使用 lambda
(pd.Series(['foo', 'fuz', np.nan])
.str.replace(r'[a-z]+',
lambda m: m.group(0)[::-1])
)
# 取替换成第二部分并大小写互换
pat = r"(?P<one>\w+) (?P<two>\w+) (?P<three>\w+)"
repl = lambda m: m.group('two').swapcase()
pd.Series(['One Two Three', 'Foo Bar Baz']).str.replace(pat, repl)
'''
0 tWO
1 bAR
dtype: object
'''
slice_replace
可以将保留选定内容,剩余内容进行替换:
s = pd.Series(['a', 'ab', 'abc', 'abdc', 'abcde'])
# 保留第一个,其他的替换或者追加 X
s.str.slice_replace(1, repl='X')
'''
0 aX
1 aX
2 aX
3 aX
4 aX
dtype: object
'''
# 指定位置前删除并用 X 替换
s.str.slice_replace(stop=2, repl='X')
'''
0 X
1 X
2 Xc
3 Xdc
4 Xcde
dtype: object
'''
# 指定区间的内容被替换
s.str.slice_replace(start=1, stop=3, repl='X')
'''
0 aX
1 aX
2 aX
3 aXc
4 aXde
dtype: object
'''
# 对整体重复两次
pd.Series(['a', 'b', 'c']).repeat(repeats=2)
# 对每个行内的内容重复两次
pd.Series(['a', 'b', 'c']).str.repeat(repeats=2)
# 指定每行重复几次
pd.Series(['a', 'b', 'c']).str.repeat(repeats=[1, 2, 3])
'''
0 a
1 bb
2 ccc
dtype: object
'''
另外,替换工作可以使用 df.replace() 和 s.replace()。
更新时间:2020-10-29 11:03:31 标签:pandas 替换 文本