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

带行列名称的Pandas DataFrame相乘报错,求保留结构的乘积结果

解决Pandas DataFrame对应单元格相乘的TypeError问题

你的问题根源很清晰:两个DataFrame里的SKU列是字符串类型,当你直接用*或mul()时,Pandas会尝试对所有列(包括SKU列)执行运算——而字符串和数字(或字符串和字符串)相乘是不被允许的,这就触发了TypeError: can't multiply sequence by non-int of type 'str'。

另外要注意你示例里的细节:两个DataFrame的SKU值大小写不一致(FUJI Film vs FUJI FILM),如果直接对齐会导致匹配失败,处理时需要先统一SKU格式。

下面是两种可行的解决方案:

方案1:将SKU设为索引后计算

把SKU列转为索引,让Pandas只针对数值列运算,同时统一SKU大小写确保对齐:

import pandas as pd

# 导入数据
df = pd.read_excel('C:/desktop/Arrays.xlsx', sheet_name=0)
df1 = pd.read_excel('C:/desktop/Arrays.xlsx', sheet_name=1)

# 将SKU设为索引,并统一大小写避免匹配错误
df = df.set_index('SKU')
df.index = df.index.str.upper()

df1 = df1.set_index('SKU')
df1.index = df1.index.str.upper()

# 执行对应单元格相乘
df3 = df.mul(df1)

# (可选)将SKU重新转回列
df3 = df3.reset_index()

方案2:仅对数值列计算后合并SKU

如果你不想改动索引,可以单独提取数值列运算,再和SKU列合并:

import pandas as pd

df = pd.read_excel('C:/desktop/Arrays.xlsx', sheet_name=0)
df1 = pd.read_excel('C:/desktop/Arrays.xlsx', sheet_name=1)

# 统一SKU大小写(避免后续数据不一致)
df['SKU'] = df['SKU'].str.upper()
df1['SKU'] = df1['SKU'].str.upper()

# 获取所有数值列(排除SKU)
numeric_columns = df.columns.drop('SKU')

# 对数值列执行相乘运算
numeric_result = df[numeric_columns].mul(df1[numeric_columns])

# 合并SKU列和运算结果
df3 = pd.concat([df[['SKU']], numeric_result], axis=1)

这两种方法都能保留原有的行列结构,且彻底避免了字符串参与数值运算的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:02