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

Python pandas拆分单列拼接值生成多列时金额小数丢失问题求解

问题原因

你之前的拆分逻辑出错核心是正则写法不符合预期:

  • 正则中.是通配符,默认匹配任意单个字符,你写的 .实际匹配规则是「空格+任意字符」,而非你需要的「空格+英文句号」,因此会误切金额里的小数点,导致小数部分丢失
  • 拆分规则没有覆盖Booked Date和日期值之间是空格、而非冒号的特殊情况,也没兼容分隔符前后多余的空格,进一步导致取值错位
解决方案

针对这种固定键名的拼接字段,不推荐用split拆分——split对数据格式一致性要求极高,只要单条数据缺字段、多空格就会出现整列错位。更稳妥的方式是用str.extract()按字段名做正则捕获,直接提取对应值,不会出现错位问题:

import re
import pandas as pd

# 编写带命名捕获组的正则,兼容多余空格、两种分隔符场景
extract_pattern = r"""
Order\s*ID:(?P<Order ID>.*?)\s*\.
.*?Record\s*ID:(?P<Record ID>.*?)\s*\.
.*?Type:(?P<Type>.*?)\s*\.
.*?Amount:(?P<Amount>.*?)\s*\.
.*?Booked\s*Date\s+(?P<Booked Date>.*)
"""

# 提取字段后和原DF拼接,保留原Details列
df = pd.concat([
    df,
    df["Details"].str.extract(extract_pattern, flags=re.VERBOSE)
], axis=1)

# 可选:字段类型转换
df["Amount"] = df["Amount"].astype(float)
df["Booked Date"] = pd.to_datetime(df["Booked Date"]).dt.date

执行后即可得到你预期的结果:

  • 原Details列完整保留
  • 拆分出的Order ID/Record ID/Type/Amount/Booked Date取值完全匹配,Amount字段会完整保留小数位,Booked Date完整保留日期值
  • 自动兼容分隔符前后的冗余空格,不需要额外做字符串清理

如果一定要使用split方法,需要将分隔符正则修正为r"\s*\.\s*|:\s*|\s+(?=\d{4}-\d{2}-\d{2})",但该方法容错率极低,不推荐在生产场景使用。

内容的提问来源于stack exchange,提问作者Atef Syed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 01:01:01