You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame处理战争死亡数据时出现数值拼接错误与科学计数法问题

死亡人数处理后数值异常的原因与修复

问题场景

我有一个记录战争、战争持续时间和死亡人数的DataFrame,为提取纯数字字符串,替换了"+"和","等符号后转为数值类型,使用的函数如下:

def death_range(df):
    df["death_range"] = df["death_range"].str.replace(",","")
    
    df["death_base"] = df["death_range"].str.split("–").str[0]
    df["death_max"] = df["death_range"].str.split("–").str[-1]
    
    df["death_base"] = df["death_base"].str.replace("+"," ")
    df["death_base"] = df["death_base"].str.replace(r"\D","", regex=True)
    
    df["death_max"] = df["death_max"].str.replace("+"," ")
    df["death_max"] = df["death_max"].str.replace(r"\D","", regex=True)
    
    df["death_base"] = pd.to_numeric(df["death_base"], errors='coerce')
    df["death_max"] = pd.to_numeric(df["death_max"], errors='coerce')
    
    return df

执行df_cp['death_max'].max()查看最致命战争的最大死亡人数,得到结果1700000040000000.0;定位对应战争后发现,原死亡范围为正确的17000000-40000000,但处理后却变成了1.700000e+15(即1700000040000000.0)。

问题原因

  • 分割符不匹配:函数中使用的分割符是全角长破折号–,但原数据里的范围分隔符是半角短横线-,导致str.split()没有将字符串拆分成两部分,death_max取到的是完整的17000000-40000000字符串。
  • 非数字替换导致数值拼接:后续用str.replace(r"\D","", regex=True)移除所有非数字字符(包括分隔符-),直接把两个数字拼接成了1700000040000000,转成数值后就出现了异常大的结果。

修复方案

调整分割符匹配逻辑,同时优化处理流程,兼容半角/全角分隔符,避免重复操作:

import pandas as pd

def death_range(df):
    # 统一处理逗号和加号,保留数字与分隔符
    df["death_range"] = df["death_range"].str.replace(",", "").str.replace("+", "")
    
    # 用正则同时匹配半角短横线和全角破折号,拆分出上下限并直接生成两列
    df[["death_base", "death_max"]] = df["death_range"].str.split(r"[-–]", expand=True)
    
    # 提取纯数字,清理残留的非数字字符
    df["death_base"] = df["death_base"].str.replace(r"\D", "", regex=True)
    df["death_max"] = df["death_max"].str.replace(r"\D", "", regex=True)
    
    # 转为数值类型,无法转换的设为NaN
    df["death_base"] = pd.to_numeric(df["death_base"], errors='coerce')
    df["death_max"] = pd.to_numeric(df["death_max"], errors='coerce')
    
    return df

优化点说明

  • 提前统一处理逗号和加号,减少重复的字符串替换操作
  • 使用正则r"[-–]"同时匹配两种分隔符,兼容不同格式的原始数据
  • 用expand=True直接将拆分结果转为两列,代码更简洁直观

内容的提问来源于stack exchange,提问作者S.H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 00:33:33