如何用Pandas保留小数点和短横线清理数值列冗余字符
清理带冗余字符的Pandas数值列(保留小数点和短横线)
实现步骤
通过正则表达式精准保留所需字符、剔除冗余内容,具体操作如下:
- 创建示例数据
import pandas as pd # 模拟原始数据 size_list = ["10 OZ" , "20 OZ", "2.5. OZ" , "#30.1 OZ", "!2 O Z" , "1-8 OZ", "1-7OZ", "20 OZ"] df = pd.DataFrame({"SIZE": size_list})
- 分步清理数据
# 第一步:仅保留数字、小数点(.)和短横线(-),删除所有其他冗余字符 df['cleaned_SIZE'] = df['SIZE'].str.replace(r'[^0-9.-]', '', regex=True) # 第二步:修复异常小数点格式 # 移除字符串末尾的无效小数点 df['cleaned_SIZE'] = df['cleaned_SIZE'].str.replace(r'\.$', '', regex=True) # 将连续多个小数点替换为单个 df['cleaned_SIZE'] = df['cleaned_SIZE'].str.replace(r'\.{2,}', '.', regex=True) # (可选)处理极端情况:清理后只剩小数点/短横线的空值 df['cleaned_SIZE'] = df['cleaned_SIZE'].replace(r'^[-.]+$', '', regex=True)
清理结果
执行后cleaned_SIZE列的输出为:["10", "20", "2.5", "30.1", "2", "1-8", "1-7", "20"],完全匹配目标要求。
正则说明
[^0-9.-]:匹配所有非数字、非小数点、非短横线的字符,直接删除\.$:精准匹配字符串末尾的小数点,避免误删中间的有效小数点\.{2,}:匹配2个及以上连续的小数点,替换为单个,修复类似2.5.这类错误格式
该方法为向量化操作,处理600条数据效率极高,无需循环遍历。
内容的提问来源于stack exchange,提问作者Syed Muzammil Ahmed
相关产品推荐
相关产品推荐

