DataFrame两列相乘出现UFuncTypeError的问题排查与解决问询
解决Pandas两列相乘的UFuncTypeError错误
问题详情
尝试对结构如下的DataFrame两列执行相乘操作:
df4 | Column LIPQOH | Column Std_cost | | -------- | -------- | | int64 | int64 | | int64 | int64 |
使用的错误代码:
df4['Value'] = df4['LIPQOH'] * ['Std_cost']
触发的错误信息:
UFuncTypeError Traceback (most recent call last) <ipython-input-52-abf5bb958617> in <cell line: 1>() ----> 1 df4['Value'] = df4['LIPQOH'] * ['Std_cost'] 2 df4 8 frames /usr/local/lib/python3.10/dist-packages/pandas/core/computation/expressions.py in _evaluate_standard(op, op_str, a, b) 68 if _TEST_MODE: 69 _store_test_result(False) ---> 70 return op(a, b) 71 72 UFuncTypeError: ufunc 'multiply' did not contain a loop with signature matching types (dtype('int64'), dtype('<U8')) -> None
已尝试操作:
- 用
dropna()移除含NaN的行 - 将数据类型从float64转换为Int
推测数据中存在少量<U8>类型数据,但不知如何排查修复。
解决方案
1. 先修复代码语法错误
你犯了一个基础语法错误:['Std_cost']是一个包含字符串的列表,而非DataFrame的列引用。pandas试图将int64类型的列与字符串列表相乘,直接触发类型不匹配错误。
修正后的正确代码:
df4['Value'] = df4['LIPQOH'] * df4['Std_cost']
2. 排查并修复数据类型异常
如果修正语法后仍报错,按以下步骤排查:
- 先确认列的实际数据类型:
print(df4.dtypes) - 找出列中无法转换为数值的行(即
<U8>类型的异常数据):import pandas as pd # 检查Std_cost列的无效行 invalid_rows = df4[pd.to_numeric(df4['Std_cost'], errors='coerce').isna()] print(invalid_rows) - 修复异常数据:
可根据业务需求选择处理方式:- 将无效值转换为合法数值(比如0):
df4['Std_cost'] = pd.to_numeric(df4['Std_cost'], errors='coerce').fillna(0).astype('int64') - 直接删除含无效值的行:
df4 = df4[pd.to_numeric(df4['Std_cost'], errors='coerce').notna()]
- 将无效值转换为合法数值(比如0):
- 确认数据类型统一后,再执行相乘操作即可。
内容的提问来源于stack exchange,提问作者Sattai
相关产品推荐
相关产品推荐

