如何判断DataFrame迭代行中索引10的元素是否为NaN?原方法失效
解决Pandas中判断NaN的问题
为什么原判断无效?
Pandas里的NaN是特殊的浮点值,它不等于任何值(包括自身),但NaN != None的结果为True——因为NaN是一个实际存在的浮点值,并非None。所以你的原判断会把NaN当成非缺失值,进入if分支执行split,但NaN没有split方法,自然会报错。
正确的判断方法
用Pandas提供的专门判断缺失值的函数:
pd.notna():判断元素不是缺失值(包括NaN、NaT等)pd.isna():判断元素是缺失值,取反后也能达到效果
修改后的代码:
import pandas as pd i=0 for row in df.iterrows(): if pd.notna(row[1][10]): names = row[1][10].split(',') for name in names: df2.loc[i,:] = row[1][:] i=i+1 else: i=i+1
更高效的替代方案
iterrows遍历效率较低,数据量大时推荐用Pandas的矢量化操作替代循环:
# 复制原数据 df2 = df.copy() # 假设索引10的列名为'names',替换成实际列名 target_col = df.columns[10] # 拆分非NaN的单元格为列表 df2[target_col] = df2[target_col].str.split(',') # 将列表展开为多行 df2 = df2.explode(target_col).reset_index(drop=True)
这种方法无需手动维护索引i,代码更简洁,执行效率也更高。
内容的提问来源于stack exchange,提问作者Samir112
相关产品推荐
相关产品推荐

