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

Pandas DataFrame循环匹配赋值触发TypeError问题求助

问题分析与解决方案

错误核心原因

报错TypeError: 'in <string>' requires string as left operand, not int的本质是类型不匹配:

  • check_df["V_ORG_UNIT_CODE"]存储的是整数类型(int)
  • in_df["MergedColumn"]是字符串类型(str)
    Python不允许直接判断整数是否包含在字符串中,必须先把整数转为字符串才能进行匹配。

同时你的代码还有两个逻辑缺陷:

  1. 使用Series.append(z)赋值会覆盖整列数据,且无法对应到check_df的正确行
  2. 嵌套循环效率极低,数据量大时会严重拖慢运行速度

修复方案

方案1:修正嵌套循环(适合小数据集)

先解决类型问题,再调整赋值逻辑,确保匹配结果对应到check_df的正确行:

import pandas as pd

# 初始化空列(若未初始化)
check_df['V_ORG_UNIT_NAME_LEVEL14'] = pd.NA

# 遍历check_df的每一行,通过索引定位赋值
for idx, x in check_df["V_ORG_UNIT_CODE"].items():
    # 将整数转为字符串
    x_str = str(x)
    # 遍历in_df查找匹配项
    for y, z in zip(in_df["MergedColumn"], in_df["OutputDisplay"]):
        if x_str in y:
            check_df.loc[idx, 'V_ORG_UNIT_NAME_LEVEL14'] = z
            # 找到匹配后跳出内层循环,避免重复赋值
            break

方案2:矢量化操作(推荐,适合大数据集)

利用Pandas的矢量化方法替代嵌套循环,大幅提升运行效率:

import pandas as pd

# 将整数代码转为字符串
check_df['V_ORG_UNIT_CODE_STR'] = check_df['V_ORG_UNIT_CODE'].astype(str)

# 定义匹配函数:根据代码查找对应的OutputDisplay
def find_match(code):
    # 筛选MergedColumn包含该代码的行,排除空值
    matches = in_df[in_df['MergedColumn'].str.contains(code, na=False)]
    # 返回第一个匹配结果,无匹配则返回NA
    return matches['OutputDisplay'].iloc[0] if not matches.empty else pd.NA

# 批量应用函数到check_df的每一行
check_df['V_ORG_UNIT_NAME_LEVEL14'] = check_df['V_ORG_UNIT_CODE_STR'].apply(find_match)

# 删除临时辅助列
check_df.drop('V_ORG_UNIT_CODE_STR', axis=1, inplace=True)

方案3:映射字典匹配(适合in_df无重复匹配项的场景)

如果in_df中每个代码仅对应一个OutputDisplay,可以先构建映射字典,实现快速匹配:

import pandas as pd

# 构建代码到名称的映射字典
code_name_map = {}
for merged_str, display_name in zip(in_df['MergedColumn'], in_df['OutputDisplay']):
    # 遍历check_df的所有字符串格式代码,匹配后存入字典
    for code in check_df['V_ORG_UNIT_CODE'].astype(str):
        if code in merged_str:
            code_name_map[code] = display_name

# 用map方法批量赋值,无匹配项填充NA
check_df['V_ORG_UNIT_NAME_LEVEL14'] = check_df['V_ORG_UNIT_CODE'].astype(str).map(code_name_map).fillna(pd.NA)

关键注意事项

  • 若in_df["MergedColumn"]存在空值,使用str.contains时需加上na=False避免报错
  • 若存在多个匹配项,需根据业务需求调整逻辑(比如取第一个、拼接所有结果等)
  • 大数据集优先选择方案2或3,嵌套循环仅适合小规模数据场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 02:10:18