Pandas遍历行判断Status列是否为NULL时出现AttributeError问题求助
解决Pandas遍历行检查Status列空值时的AttributeError问题
问题原因
用iterrows()遍历DataFrame时,row['Status']返回的是单个元素而非Series对象:
- 当元素是字符串(如'Success')时,调用
isnull()会触发AttributeError,因为字符串类型没有这个方法; - 用
is None判断不生效,是因为Pandas中的空值是NaN(numpy.float64类型),并非Python原生的None。
解决方案
方案1:使用Pandas矢量化操作(推荐,效率更高)
无需逐行遍历,直接筛选空值行:
import pandas as pd data = pd.read_excel('ExcelFile.xlsx') # 筛选Status列为空的行 null_status_rows = data[data['Status'].isnull()] # 打印空值行信息 for idx, row in null_status_rows.iterrows(): print(f"行{idx}的Status为空")
方案2:保留遍历,用pd.isna()函数判断
如果必须逐行处理,调用Pandas顶层的pd.isna()函数来判断空值:
import pandas as pd data = pd.read_excel('ExcelFile.xlsx') results = {} for index, row in data.iterrows(): if pd.isna(row['Status']): print('NULL')
pd.isna()可以兼容所有类型的空值(包括NaN、None),不管元素是字符串还是数值类型都能正确识别。
方案3:用apply()逐行处理
若需要对每行做复杂逻辑,推荐用apply()替代iterrows():
import pandas as pd data = pd.read_excel('ExcelFile.xlsx') # 逐行检查并打印空值提示 data.apply(lambda row: print('NULL') if pd.isna(row['Status']) else None, axis=1)
内容的提问来源于stack exchange,提问作者Jane Morel
相关产品推荐
相关产品推荐

