如何在Pandas DataFrame中将所有'+'替换为'.5'?
解决方法
针对你遇到的替换问题,核心是要同时处理**单独的'+'和数字后跟'+'**两种场景,以下是两种可行的实现方式:
方法1:针对指定列批量处理
import pandas as pd data = {'Name': ['A', 'B', 'C', 'D'], 'Lower': ['+', '2', '2+', '3'], 'Upper': ['2','3+','4+','5']} df = pd.DataFrame(data) # 遍历需要处理的列(Lower和Upper) for col in ['Lower', 'Upper']: # 使用正则匹配两种场景:单独的'+' 或 数字+'+' df[col] = df[col].str.replace(r'(\d)?\+', r'\1.5', regex=True) print(df)
方法2:全局替换(更简洁)
直接利用df.replace的正则模式,对整个DataFrame中符合规则的内容进行替换:
df = df.replace(r'(\d)?\+', r'\1.5', regex=True)
为什么之前的方法失败?
df.replace('+','.5', regex=False):regex=False时,只会匹配**整个单元格完全等于'+'**的内容,因此像2+这种包含'+'但不是整个单元格的内容不会被替换。df['Lower'].str.replace('+', '.5'):str.replace默认启用正则模式,而+是正则元字符(表示匹配前一个字符1次或多次),未转义的话会导致匹配逻辑错误,进而出现异常结果。
执行上述代码后,得到的DataFrame与你的期望输出完全一致:
Name Lower Upper 0 A .5 2 1 B 2 3.5 2 C 2.5 4.5 3 D 3 5
内容的提问来源于stack exchange,提问作者boboho
相关产品推荐
相关产品推荐

