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

Python中如何让DataFrame整列与标量正确执行数值乘法运算

运行异常效果截图

问题复现代码
df = pd.DataFrame(pd.read_csv("SPOILER_Monster_Hunt.csv"))
df.columns = ["S/No", "Member_Name", "L1", "L2", "L3", "L4", "L5"]
#some modifications below
df = df.drop(index=0)
df = df.drop(columns='S/No')
df = df.fillna(0)

 #Adjusting points with monster levels
df['L1'] = df['L1'] * 50
df['L2'] = df['L2'] * 150
df['L3'] = df['L3'] * 300
df['L4'] = df['L4'] * 1000
df['L5'] = df['L5'] * 2000

df.head()
# show the dataframe
print(df)

异常表现:执行列与标量的乘法操作时,列内值会被重复对应次数,例如运行df['L1'] = df['L1']*50时,L1列内容被重复50次,无法实现单元格数值与标量做算术乘法的预期效果。

问题原因

异常本质是类型不匹配:read_csv读入数据时,L1-L5列被识别为字符串(object)类型,而非数值类型。Python原生逻辑中,字符串乘整数的效果是将字符串重复对应次数,和数值乘法逻辑完全不同,因此触发异常。
执行print(df.dtypes)即可验证,输出中L1-L5列的类型会显示为object,而非int64/float64。

修复方案

任选一种方案即可解决:

  • 方案1(兼容性最好,推荐):完成基础数据清洗后,手动将参与计算的列转换为数值类型,再执行乘法计算,修正后完整代码如下:
import pandas as pd
df = pd.read_csv("SPOILER_Monster_Hunt.csv")
df.columns = ["S/No", "Member_Name", "L1", "L2", "L3", "L4", "L5"]

df = df.drop(index=0)
df = df.drop(columns='S/No')
df = df.fillna(0)

# 新增:将等级列统一转换为整数类型
level_columns = ["L1", "L2", "L3", "L4", "L5"]
df[level_columns] = df[level_columns].astype(int)

# 后续积分计算逻辑可正常执行算术乘法
df['L1'] = df['L1'] * 50
df['L2'] = df['L2'] * 150
df['L3'] = df['L3'] * 300
df['L4'] = df['L4'] * 1000
df['L5'] = df['L5'] * 2000

print(df.head())
print(df)
  • 方案2:读入数据时直接跳过第一行脏数据(当前代码中drop(index=0)就是删除这行异常数据),让pandas自动识别列类型,无需手动转换:
import pandas as pd
# 读入时跳过第1行脏数据,自动识别数值列类型
df = pd.read_csv("SPOILER_Monster_Hunt.csv", skiprows=1)
df.columns = ["S/No", "Member_Name", "L1", "L2", "L3", "L4", "L5"]

df = df.drop(columns='S/No')
df = df.fillna(0)

# 后续乘法逻辑可直接正常运行
df['L1'] = df['L1'] * 50
df['L2'] = df['L2'] * 150
df['L3'] = df['L3'] * 300
df['L4'] = df['L4'] * 1000
df['L5'] = df['L5'] * 2000

print(df.head())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:57:33