如何判断Pandas行中Number列值为空并自定义填充?
解决Excel数据加载与Number列空值填充问题
需求说明
将test.xlsx文件加载到Pandas DataFrame中,遍历每一行数据并转换为类对象,当行中Number列值为空时,填充自定义指定值。
原代码(存在两处问题)
import pandas as pd df = pd.read_excel(r'test.xlsx') for row in df.rows: # 错误:DataFrame没有rows属性,应使用iterrows()或itertuples() id = row['Id'] name = row['Name'] number = row['Number']
原思路的问题
直接用if row['Number'] == NaN:判断空值是无效的,因为NaN在Python中不等于任何值(包括自身),必须用专门的空值判断方法。
简洁实现方案
方案1:循环内用三元表达式判断(修正遍历方式+空值判断)
import pandas as pd # 自定义填充值 MY_CUSTOM_NUMBER = 0 # 可替换为你需要的数值 df = pd.read_excel(r'test.xlsx') # 使用iterrows()遍历行,返回索引和行数据 for idx, row in df.iterrows(): id = row['Id'] name = row['Name'] # 用pd.isna()判断空值,三元表达式简洁赋值 number = MY_CUSTOM_NUMBER if pd.isna(row['Number']) else row['Number'] # 这里可以继续将id、name、number转换为类对象的逻辑
方案2:先整列填充空值再遍历(更高效,适合大数据量)
如果数据量较大,先对整个Number列做空值填充再遍历,避免循环内重复判断,效率更高:
import pandas as pd MY_CUSTOM_NUMBER = 0 df = pd.read_excel(r'test.xlsx') # 先填充整列的空值 df['Number'] = df['Number'].fillna(MY_CUSTOM_NUMBER) # 遍历行(用itertuples()比iterrows()更快) for row in df.itertuples(index=False): id = row.Id name = row.Name number = row.Number # 转换为类对象的逻辑
补充说明
pd.isna()可以识别所有类型的空值(包括NaN、None等),兼容性更好df.itertuples()比df.iterrows()的遍历效率更高,适合处理大规模数据
内容的提问来源于stack exchange,提问作者user19678327
相关产品推荐
相关产品推荐

