咨询: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!
原因分析
- 转义序列警告:正则表达式里的
\$无需转义,或者未使用原始字符串(前缀r),导致Python错误解析转义字符。 - 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
相关产品推荐
相关产品推荐

