Pandas对object类型列非空单元格应用函数报TypeError问题咨询
报错原因
- 核心原因是
Seam_Height列的数据类型为object,列中部分看起来是数值的内容实际是字符串格式,将字符串传入自定义函数和整数做大小比较时,就会触发这个类型不兼容的报错。 - 你当前使用整行
apply的写法效率极低,当数据量较大时性能会非常差,属于不必要的遍历操作。
解决方法
第一步:先将目标列转为数值类型
用pd.to_numeric转换列类型,无法转为数值的内容会自动变为NaN,刚好符合你空值的判定逻辑:
df['Seam_Height'] = pd.to_numeric(df['Seam_Height'], errors='coerce')
第二步:实现分级逻辑
推荐用向量化的pd.cut实现,不需要自定义函数、不需要遍历,性能远高于apply写法,且可以完全匹配你原函数的判断逻辑:
df['Seam_class'] = pd.cut( df['Seam_Height'], bins=[-float('inf'), 43, 60, 72, float('inf')], labels=['V_low', 'Low', 'Medium', 'High'], right=False # 匹配原函数<阈值的判断逻辑,区间为左闭右开 ).fillna(' ')
如果一定要沿用你写的自定义函数,也可以仅对Seam_Height列做操作,不需要整行遍历:
df['Seam_class'] = df['Seam_Height'].apply(lambda x: seam_thickness_class_func(x) if pd.notnull(x) else ' ')
内容的提问来源于stack exchange,提问作者Eng_GR
相关产品推荐
相关产品推荐

