Pandas如何去除DataFrame列中数字间空格并保留姓名间空格
问题根因
你原有代码失效是两个逻辑错误导致的:
str.isdigit()仅能识别无任何其他字符、纯数字组成的字符串,你示例里带空格的数字串比如07 07 34因为包含空格,会被判定为非数字,根本匹配不到待处理的目标行。- 直接调用
df["Author"].strip()存在两个问题:一是Pandas的Series对象没有直接的strip()方法,必须通过.str访问器调用字符串方法;二是这个写法是针对整列操作,就算匹配逻辑正确,也会误修改不需要改动的姓名单元格。
正确实现代码
核心判断逻辑是:只要单元格内容包含数字,就移除其中所有空格;不含数字的姓名单元格完全保留原格式。
最简洁的实现方式如下:
# 筛选出所有包含数字的行,na=False用来跳过空值避免报错 num_row_mask = df["Author"].str.contains(r'\d', na=False) # 仅对筛选出的行做空格移除操作 df.loc[num_row_mask, "Author"] = df.loc[num_row_mask, "Author"].str.replace(' ', '', regex=False)
处理后你示例的Author列输出结果为:
Author 0 070734 1 082620 2 082620 3 Tata Smith 4 Jhon Doe 5 082622 6 3409243
完全匹配你的需求:带空格的数字串空格被全部清除,姓名的空格完整保留。
如果后续需要扩展更复杂的清洗规则,也可以用逐行处理的写法,效果一致:
def clean_author_cell(content): content = str(content) # 包含数字就删所有空格,否则原样返回 if any(ch.isdigit() for ch in content): return content.replace(' ', '') return content df["Author"] = df["Author"].apply(clean_author_cell)
内容的提问来源于stack exchange,提问作者Egidius
相关产品推荐
相关产品推荐

