如何修改Pandas DataFrame中以-*开头、*结尾的单元格值
问题解决方法
报错原因
df.apply()默认按列遍历,传入lambda的参数是整列的Series对象,对Series直接做if布尔判断会触发歧义错误,同时你写的字符串匹配规则也和实际要处理的-*开头、*结尾的格式不匹配。
实现方案
方案1:applymap单单元格处理(逻辑直观)
applymap会作用于DataFrame的每个单元格,直接对单个值做判断处理:
def format_cell(val): # 仅对字符串类型做格式校验 if isinstance(val, str): val = val.strip() if val.startswith('-*') and val.endswith('*'): # 提取中间数值返回整数类型 return int(val[2:-1]) return val # 应用到全表 df = df.applymap(format_cell)
方案2:正则批量替换(性能更优,适合大数据量)
用pandas内置的正则替换方法批量处理所有符合规则的内容,无需逐行遍历:
# 正则匹配-*开头、*结尾的内容,提取中间部分 df = df.replace(r"^-\*(.+)\*$", r"\1", regex=True) # 可选:把数值列统一转成整数类型 df[["salary", "age", "Id"]] = df[["salary", "age", "Id"]].astype(int)
两种方案运行后都能得到你需要的处理结果。
内容的提问来源于stack exchange,提问作者Let'sbecool
相关产品推荐
相关产品推荐

