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

Python中DataFrame浮点列相加报错:'str'与'int'无法比较

问题描述

我尝试在DataFrame Call08q1_09q1 中通过相加两个浮点类型列创建新变量:

Call08q1_09q1['MBS']=Call08q1_09q1['RCFD8639']+Call08q1_09q1['RCFD2170']

但触发错误:

'<' not supported between instances of 'str' and 'int'

执行 Call08q1_09q1.info() 显示所有列均为 float64 类型,不存在字符串类型:

Call08q1_09q1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 39675 entries, 0 to 39674
Data columns (total 20 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   RSSD9001  39675 non-null  float64
 1   RSSD9999  39675 non-null  float64
 2   RCFD2170  39673 non-null  float64
 3   RCFD8639  38166 non-null  float64
 4   RCFD8641  38166 non-null  float64
 5   RCFD8639  38166 non-null  float64
 6   RCFD0211  38166 non-null  float64
 7   RCFD1287  38166 non-null  float64
 8   RCON3531  1107 non-null   float64
 9   RCFD1289  38166 non-null  float64
 10  RCFD1294  38166 non-null  float64
 11  RCFD1293  38166 non-null  float64
 12  RCFD1298  38166 non-null  float64
 13  RCON3532  1111 non-null   float64
 14  RCFD3210  38443 non-null  float64
 15  RIAD4230  38398 non-null  float64
 16  RIAD4340  38441 non-null  float64
 17  RCFD2122  39644 non-null  float64
 18  RCFD2125  249 non-null    float64
 19  RCFD1600  52 non-null     float64
dtypes: float64(20)
解决方案

1. 检查重复列的实际内容

注意到输出里有两个同名的RCFD8639列,虽然info()显示都是float64,但可能其中一列实际混入了字符串值。执行以下代码排查:

# 遍历所有名为RCFD8639的列,检查字符串元素
for col in Call08q1_09q1.columns[Call08q1_09q1.columns == 'RCFD8639']:
    print(f"列名: {col}")
    str_mask = Call08q1_09q1[col].apply(lambda x: isinstance(x, str))
    print(f"字符串元素数量: {str_mask.sum()}")
    if str_mask.sum() > 0:
        print(Call08q1_09q1[str_mask][col])

2. 强制转换列类型并处理重复列

如果确认存在隐藏字符串,先重命名重复列避免混淆,再强制转换为数值类型(无法转换的值会转为NaN):

# 重命名重复列
Call08q1_09q1.columns = [
    f"{col}_{i}" if col in Call08q1_09q1.columns.value_counts()[Call08q1_09q1.columns.value_counts()>1].index 
    else col 
    for i, col in enumerate(Call08q1_09q1.columns)
]

# 强制转换目标列为float
Call08q1_09q1['RCFD8639_0'] = pd.to_numeric(Call08q1_09q1['RCFD8639_0'], errors='coerce')
Call08q1_09q1['RCFD8639_1'] = pd.to_numeric(Call08q1_09q1['RCFD8639_1'], errors='coerce')
Call08q1_09q1['RCFD2170'] = pd.to_numeric(Call08q1_09q1['RCFD2170'], errors='coerce')

# 执行相加操作(根据需求选择对应的RCFD8639列)
Call08q1_09q1['MBS'] = Call08q1_09q1['RCFD8639_0'] + Call08q1_09q1['RCFD2170']

3. 排查索引问题

如果上述方法无效,检查DataFrame索引是否包含字符串:

print("索引类型:", type(Call08q1_09q1.index[0]))
# 若索引为字符串,重置索引
Call08q1_09q1 = Call08q1_09q1.reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:05:22