使用Pandas替换数据列中含范围标识的字符串单元格并转换为浮点型
Pandas化验值字段清洗解决方案
核心需求实现逻辑
只要单元格内容包含<符号就整体替换为0,再统一转换为浮点型,保留原有NaN空值。
单列处理代码(以示例列Ag ICP-MS mg/kg 0.03为例)
# 1. 匹配所有带<的单元格,替换为0 df_clean.loc[df_clean['Ag ICP-MS mg/kg 0.03'].astype(str).str.contains('<', na=False), 'Ag ICP-MS mg/kg 0.03'] = 0 # 2. 整列转换为浮点型 df_clean['Ag ICP-MS mg/kg 0.03'] = df_clean['Ag ICP-MS mg/kg 0.03'].astype(float)
参数说明
astype(str):统一转成字符串后再做匹配,避免数值类型调用字符串方法报错na=False:空值NaN匹配时返回False,不参与替换,保留原有空值
多列批量处理代码
如果有多个化验列需要执行相同清洗逻辑,可批量处理:
# 填入所有需要处理的化验列列名 target_cols = ['Ag ICP-MS mg/kg 0.03', 'Au ICP-MS mg/kg 0.01', 'Cu ICP-MS mg/kg 0.05'] for col in target_cols: df_clean.loc[df_clean[col].astype(str).str.contains('<', na=False), col] = 0 df_clean[col] = df_clean[col].astype(float)
正则replace简化写法
也可以用replace正则匹配一步完成替换:
# 正则匹配所有包含<的完整字符串,直接替换为0后转浮点 df_clean['Ag ICP-MS mg/kg 0.03'] = df_clean['Ag ICP-MS mg/kg 0.03'].replace(r'^.*<.*$', 0, regex=True).astype(float)
内容的提问来源于stack exchange,提问作者kfob
相关产品推荐
相关产品推荐

