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

使用Pandas转换CSV价格列时遭遇IntCastingNaNError错误求助

问题分析

错误pandas.errors.IntCastingNaNError: Cannot convert non-finite values (NA or inf) to integer的核心原因是Price列存在空值(NaN)、无穷值或非数值内容,和数据量无关。同时你的代码还有两处明显问题:

  1. 误将整个DataFrame传给divide_by_7_5函数,而非目标列df["Price"]
  2. 强制将含空值的列转为int类型——int类型无法存储NaN,必然触发报错
解决方案

步骤1:先清理Price列数据

先读取数据并排查、处理异常值:

import pandas as pd

# 只读取Price列,避免加载冗余数据
data = pd.read_csv(r"products.csv", usecols=["Price"])

# 排查异常:查看空值数量
print("空值数量:", data["Price"].isna().sum())
# 排查非数值的行(如果Price是字符串格式)
non_numeric_rows = data[pd.to_numeric(data["Price"], errors="coerce").isna()]
print("非数值行:\n", non_numeric_rows)

# 处理空值:二选一即可
# 方案1:删除含空值的行
data = data.dropna(subset=["Price"])
# 方案2:用中位数填充空值(适合不想丢数据的场景)
# data["Price"] = data["Price"].fillna(data["Price"].median())

# 转换为数值类型(先转float,确保兼容空值;处理完空值后也可转int)
data["Price"] = pd.to_numeric(data["Price"], errors="coerce")

步骤2:高效实现货币转换

不用写循环函数,Pandas原生支持向量运算,效率远高于Python循环:

# 直接对列做除法完成转换
data["Converted_Price"] = data["Price"] / 7.5
print(data.head())

如果一定要用自定义函数,需传入列的数值序列:

def divide_by_7_5(numbers):
    return numbers / 7.5

# 传入Price列的Series直接运算
result = divide_by_7_5(data["Price"])
print(result.head())

关键提醒

  • low_memory=False是解决大文件读取时的类型推断问题,和当前空值转int的报错无关,所以加了没用
  • 处理万级以上数据时,优先用Pandas原生操作,避免手动循环,性能差距会非常大

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:25:28