读取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
相关产品推荐
相关产品推荐

