DataFrame新增列时空单元格判断失效问题求助
问题解决方法
核心问题分析
- 空值判断语法错误:Pandas中空单元格存储的是
NaN,不能用is empty这种错误语法判断,需用pd.isna()或pd.isnull()来检测空值。 - 判断顺序不合理:空值判断被放在数值比较逻辑之后,当
Qty为空时,前面的数值比较会直接返回False,最终走到else分支返回Check。
修改后的代码
import pandas as pd def F1(k): if k['Lev.'] == '.1': # 修正原代码列名错误:DataFrame列是Lev.而非Lev return 'Expl1' elif k['Lev.'] == '.2': return 'Expl2' elif pd.isna(k['Qty']): # 将空值判断提前,避免无效的数值比较 return 'NoMap' elif k['Qta'] == k['Qty']: return 'OK' elif k['Qta'] > k['Qty']: return 'NOK' elif k['Qta'] < k['Qty']: return 'Less' else: return 'Check' df['OK/NOK'] = df.apply(F1, axis=1)
额外说明
- 如果你的空单元格实际是空白字符串(而非Pandas默认的
NaN),可将空值判断改为k['Qty'] == ''。 - 原代码中存在列名拼写错误:DataFrame的列是
Lev.(带点),但函数里写的是k['Lev'],这会触发KeyError,已同步修正。
内容的提问来源于stack exchange,提问作者user19613662
相关产品推荐
相关产品推荐

