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

读取Excel关键词匹配Pandas DataFrame 出现float无法用于字符串in运算报错

问题原因

你遇到的类型报错核心是Excel关键词列的空单元格被Pandas自动解析为NaN(浮点类型),你打印输出里的nan就是该类型值。当执行in <string>判断时,左操作数是浮点型的NaN,不符合字符串要求,因此触发报错。
你硬编码关键词时没有空值,所以运行正常。

解决方案

你可以任选以下任意一种方式修复:

方案1:读取关键词时直接过滤空值(推荐)

读取后统一清理每列的空值,并且转换为字符串格式,从根源避免空值和类型问题:

df_Dienstleister = pd.read_excel('Dienstleister.xlsx', header=None)
# 逐列清理关键词:删除空值→转字符串→去除前后空格→过滤掉全空的字符串
Keywords_Dritte = [str(k).strip() for k in df_Dienstleister[0].dropna().tolist() if str(k).strip()]
Keywords_EDT = [str(k).strip() for k in df_Dienstleister[1].dropna().tolist() if str(k).strip()]
Keywords_EKN = [str(k).strip() for k in df_Dienstleister[2].dropna().tolist() if str(k).strip()]

处理完成后你原本的循环逻辑不需要修改即可正常运行。

方案2:判断逻辑中增加类型校验

如果你需要保留空值不做过滤,可以在匹配判断前先校验关键词是否为字符串类型:

for y in range(0, number_of_Keywords_EKN):
    # 先判断是不是字符串,再执行包含匹配
    if isinstance(Keywords_EKN[y], str) and Keywords_EKN[y] in df.iloc[x, 12]:
        df.iloc[x, 13] = "EKN"

其余EDT、Dritte的匹配逻辑也做相同修改即可。

优化建议:替换嵌套循环提升运行效率

你当前的双层嵌套循环在数据量大的时候运行效率极低,可以替换为Pandas内置的字符串匹配方法,性能提升非常明显:

# 先把待匹配列统一转为字符串,避免后续类型报错
df.iloc[:,12] = df.iloc[:,12].astype(str)

# 批量匹配EKN
ekn_pattern = '|'.join(Keywords_EKN)
df.loc[df.iloc[:,12].str.contains(ekn_pattern), 13] = 'EKN'

# 批量匹配EDT
edt_pattern = '|'.join(Keywords_EDT)
df.loc[df.iloc[:,12].str.contains(edt_pattern), 13] = 'EDT'

# 批量匹配Dritte
dritte_pattern = '|'.join(Keywords_Dritte)
df.loc[df.iloc[:,12].str.contains(dritte_pattern), 13] = 'Dritte'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:45:03