Pandas DataFrame eval函数除法运算报错,乘法正常如何解决?
解决Pandas eval除法报错:TypeError: unsupported operand type(s) for /: 'object' and '<class 'int'>'
你的问题很典型——虽然df.eval('I = G * H')能正常运行,但加了除法操作就报错,核心原因是列G或H的数据类型是object(大概率是字符串格式的数值)。
为什么乘法能运行但除法不行?
pandas对object类型(字符串)和整数的乘法有特殊兼容逻辑:它会把字符串重复指定次数(比如'123' * 2会变成'123123'),所以不会报错,但这其实不是你想要的数值乘法!而除法没有这种字符串兼容处理,直接抛出了类型不支持的错误。
解决方案
方案1:在eval表达式中显式转换数据类型
直接在计算表达式里用astype()把列转成数值类型后再运算:
df.eval('I = (G.astype(float) * H.astype(float)) / 10000', inplace=True)
如果你的数据是整数类型,也可以用astype(int),根据实际业务场景选择即可。
方案2:提前转换列的数据类型(推荐)
如果后续还要用G、H列做其他数值计算,提前把它们转成数值类型会更高效,也能避免重复转换:
# 转换G和H列为浮点型 df[['G', 'H']] = df[['G', 'H']].astype(float) # 现在再执行原eval语句就不会报错了 df.eval('I = (G * H) / 10000', inplace=True)
如果转换时遇到非数值的字符串,可以用pd.to_numeric()并设置errors='coerce',把无效值统一转成NaN:
df['G'] = pd.to_numeric(df['G'], errors='coerce') df['H'] = pd.to_numeric(df['H'], errors='coerce')
验证数据类型
执行以下代码可以确认G、H列的类型是否已正确转换:
print(df.dtypes)
内容的提问来源于stack exchange,提问作者Sabyasachi
相关产品推荐
相关产品推荐

