如何在Pandas DataFrame中替换多字符串且避免内存问题?
解决DataFrame批量替换子串的内存错误问题
你遇到的内存错误是因为用列表批量替换时,pandas会逐个遍历每个子串并重复处理整列,多次内存分配导致溢出。可以用正则表达式一次性匹配所有要删除的子串,只遍历列一次,大幅降低内存占用:
具体实现步骤
- 整理需要删除的子串列表,对每个子串进行正则转义(避免特殊字符干扰匹配)
- 用
|连接所有转义后的子串,形成一个正则匹配模式 - 调用
str.replace一次性完成所有子串的删除
代码示例
import re # 定义需要删除的所有子串 to_remove = [ 'SPOUSE_2','SPOUSE_nan','PARENT_2','PARENT_nan','GRANDPARENT_2','GRANDPARENT_nan','CHILD_2', 'CHILD_nan','RELATIVE_2','RELATIVE_nan','LOVER_2','LOVER_nan','FRIEND_2','FRIEND_nan', '세부 대인관계문제 기타 상세_nan','세부 대인관계문제 기타 상세_','대인관계문제_1', '애인 관련_2','애인 관련_nan','직장 내_2','직장 내_nan','소외 문제_2','소외 문제_nan', '수면제_2','수면제_nan','진통제_2','진통제_nan','병원에서 처방 받은 약물_2', '병원에서 처방 받은 약물_nan','기타약물_nan','농약_2','농약_nan','살충제_2','살충제_nan', '제초제_2','제초제_nan','쥐약_2','쥐약_nan','화학약품_nan','목매달기_2','목매달기_nan', '가스 질식_2','가스 질식_nan','물에 뛰어들기_2','물에 뛰어들기_nan','뛰어내림_2', '뛰어내림_nan','칼, 송곳으로 찌르기_2','칼, 송곳으로 찌르기_nan','세부 동거자 기타 상세_nan' ] # 生成正则匹配模式,转义特殊字符避免匹配错误 pattern = '|'.join(map(re.escape, to_remove)) # 执行批量替换,直接覆盖原列 df['EVENT_DTL'] = df['EVENT_DTL'].str.replace(pattern, '', regex=True)
补充说明
- 如果
EVENT_DTL列存在NaN值,可先填充为空字符串再替换:df['EVENT_DTL'] = df['EVENT_DTL'].fillna('').str.replace(pattern, '', regex=True) - 这种方法仅对列进行一次遍历操作,内存占用远低于原方案的逐个替换,能有效解决大型DataFrame的内存溢出问题。
内容的提问来源于stack exchange,提问作者Chung Joshua
相关产品推荐
相关产品推荐

