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

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)
---&gt; 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()]
      
  • 确认数据类型统一后,再执行相乘操作即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:44:58