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

Pandas清洗DataFrame totalNet列['x']格式值提取纯数值方案

问题说明

pandas DataFrame的totalNet列存在两类格式混杂的情况:

  • 部分值为['数值']形式的字符串,例如"['385.88']"
  • 部分值为常规数值或字符串数值,例如'385.88'、385.88
    此前执行df['totalNet'] = df['totalNet'].map(str)仅做了类型强转,没有清理多余字符,无法得到可直接计算的纯数值格式。
    样例输入列数据:
'totalNet': ["['385.88']",'385.88',"['188.93']",'188.93',"['342.66']",'342.66',"['178.52']",'178.52',"['1947.60']",'1947.60']

目标是清除所有多余的括号、引号,统一转为浮点型数值。

解决方法

之前的方法无效的核心原因是仅做了字符串类型转换,没有对字符串内容做清洗。可以通过正则提取数值片段+类型转换的方式一次性处理所有格式,不需要单独判断值属于哪一类。

核心实现代码

import pandas as pd

# 复现样例数据
df = pd.DataFrame({
    'totalNet': ["['385.88']",'385.88',"['188.93']",'188.93',"['342.66']",'342.66',"['178.52']",'178.52',"['1947.60']",'1947.60']
})

# 清洗+类型转换
df['totalNet'] = pd.to_numeric(
    df['totalNet'].astype(str).str.extract(r'(\d+\.?\d*)', expand=False),
    errors='coerce'
)

代码逻辑说明

  • astype(str):先把所有值统一转成字符串,不管原本是数值还是带括号的字符串,都先拉平成同一类型
  • str.extract(r'(\d+\.?\d*)', expand=False):用正则直接抠出字符串里的数字和小数点,括号、引号、方括号这些无关字符会被自动过滤,不用单独写多轮替换逻辑
  • pd.to_numeric(..., errors='coerce'):把提取到的数字字符串转成可计算的浮点数,要是碰上实在转不成数字的脏数据,会自动赋值为空值NaN,不会跑一半报错中断

效果验证

执行print(df['totalNet'].tolist())可以得到清洗后的结果:

[385.88, 385.88, 188.93, 188.93, 342.66, 342.66, 178.52, 178.52, 1947.6, 1947.6]

处理后的列是标准浮点数值类型,可直接用于后续求和、统计、计算等操作。


内容的提问来源于stack exchange,提问作者ysmnrn.csv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:15:32