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

咨询:Pandas中Object类型Price列转Int类型报错的解决方法

解决Pandas中Price列类型转换的问题

问题描述

用户的CSV数据格式如下:

Make,Colour,Odometer (KM),Doors,Price
Toyota,White,150043,4,"$4,000.00"

尝试用以下代码将Price列转为int类型时出现错误:

import pandas as pd

cars_sales = pd.read_csv("./data/car_sales.csv")

cars_sales["Price"] = cars_sales["Price"].str.replace('[\$\,]|\.\d*', '').astype(int)

收到的错误包括:

  • SyntaxWarning: invalid escape sequence '\$'
  • AttributeError: Can only use .str accessor with string values!

原因分析

  1. 转义序列警告:正则表达式里的\$无需转义,或者未使用原始字符串(前缀r),导致Python错误解析转义字符。
  2. AttributeError:Price列存在非字符串类型值(可能是读取时部分异常值被自动解析为数值/空值),无法使用.str字符串访问器。

解决方案

方案一:读取CSV时直接处理(推荐)

使用read_csv的converters参数,在读取阶段完成Price列的清理与类型转换:

import pandas as pd

def clean_price(price_str):
    # 移除$、逗号,截取小数前的整数部分并转int
    cleaned = price_str.replace('$', '').replace(',', '').split('.')[0]
    return int(cleaned)

cars_sales = pd.read_csv("./data/car_sales.csv", converters={"Price": clean_price})

方案二:读取后安全修正类型与正则

先统一将列转为字符串类型,再用原始正则字符串处理转义问题:

import pandas as pd

cars_sales = pd.read_csv("./data/car_sales.csv")

# 确保列内所有值为字符串类型
cars_sales["Price"] = cars_sales["Price"].astype(str)
# 使用原始字符串前缀r避免转义警告,显式指定regex=True(Pandas 2.0+要求)
cars_sales["Price"] = cars_sales["Price"].str.replace(r'[$,]|\.\d*', '', regex=True).astype(int)

方案三:用to_numeric处理异常值(更健壮)

针对存在异常值的场景,用pd.to_numeric强制转换并处理错误:

import pandas as pd

cars_sales = pd.read_csv("./data/car_sales.csv")

# 先清理$和逗号
cars_sales["Price"] = cars_sales["Price"].astype(str).str.replace(r'[$,]', '', regex=True)
# 转数值,错误值设为NaN,填充后转int(可根据需求调整填充逻辑)
cars_sales["Price"] = pd.to_numeric(cars_sales["Price"], errors='coerce').fillna(0).astype(int)

验证

执行完成后,通过cars_sales.dtypes查看列类型,确认Price列已转为int64。

内容的提问来源于stack exchange,提问作者Quantum-script

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:03:16