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

如何在Pandas DataFrame中新增Sum列计算每行订购数量乘单品价格

错误原因
  • 报错ValueError: invalid literal for int() with base 10: '11.95'的核心原因是Price Each列的内容是带小数点的字符串,无法直接转换为整数类型。
  • astype()方法不属于inplace操作,仅执行df['Price Each'].astype('int')不会修改原DataFrame的列类型,必须赋值回对应列才会生效。
  • 原有df.assign('Sum'== df['Quantity Ordered'] * df['Price Each'])写法错误:==是比较运算符,无法完成赋值操作,且assign方法执行后会返回新的DataFrame,不赋值给原变量的话修改不会生效。
修复方案

两种可选实现方式,根据你对Sum列的数值类型需求选择:

方式1:保留小数(更符合价格计算逻辑,推荐)

不需要强制转int,直接用原始值计算即可:

import pandas as pd
from pathlib import Path

# 读取文件逻辑不变
files = Path("").rglob("*.csv")
df_list = [pd.read_csv(file, index_col=0) for file in files] 
df = pd.concat(df_list)
df.reset_index(drop=True, inplace=True)
df.dropna(subset = ["Order ID"], inplace=True)

# 先转成数值类型,异常值自动转为空值避免报错
df['Price Each'] = pd.to_numeric(df['Price Each'], errors='coerce')
df['Quantity Ordered'] = pd.to_numeric(df['Quantity Ordered'], errors='coerce')
# 直接计算Sum列并赋值
df['Sum'] = df['Quantity Ordered'] * df['Price Each']

print(df)

如果你偏好使用assign方法实现新增列,正确写法如下,注意必须将返回结果赋值给原变量:

df = df.assign(Sum = lambda x: x['Quantity Ordered'] * x['Price Each'])

方式2:Sum列需要为整数

如果业务要求必须取整,可以先转浮点再转整数,或者先四舍五入:

# 转成浮点后转int,会直接截断小数部分
df['Price Each'] = df['Price Each'].astype(float).astype(int)
df['Quantity Ordered'] = df['Quantity Ordered'].astype(int)
df['Sum'] = df['Quantity Ordered'] * df['Price Each']

# 如果需要四舍五入取整,替换为以下写法
# df['Sum'] = (df['Quantity Ordered'] * df['Price Each']).round(0).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:03