使用Pandas将Excel转为字典列表时如何跳过nan值
移除DataFrame转字典列表中的NaN值
场景重现
现有Excel工作表内容如下:
A B C D 1 039# AA8 MA21 2 088# MA22 3 077# MA23 4 MA24 5
通过pandas读取后得到带NaN值的DataFrame:
>>> df = pd.read_excel(xlsx_path) >>> df A B C D 0 1 039# AA8 MA21 1 2 088# NaN MA22 2 3 077# NaN MA23 3 4 NaN NaN MA24 4 5 NaN NaN NaN
使用df.to_dict('list')会保留所有NaN值,得到如下结果:
>>> df.to_dict('list') {'A': [1, 2, 3, 4, 5], 'B': ['039#', '088#', '077#', NaN, NaN], 'C': ['AA8', NaN, NaN, NaN, NaN], 'D': ['MA21', 'MA22', 'MA23', 'MA24', NaN]}
期望得到过滤掉NaN值的字典列表:
{'A': [1, 2, 3, 4, 5], 'B': ['039#', '088#', '077#'], 'C': ['AA8'], 'D': ['MA21', 'MA22', 'MA23', 'MA24']}
更优实现方法
无需手动遍历字典过滤,直接利用pandas内置方法处理:
方法1:字典推导式+列级dropna()
result = {col: df[col].dropna().tolist() for col in df.columns}
对DataFrame的每一列先调用dropna()移除NaN值,再转为列表,逻辑直观且高效。
方法2:apply批量处理所有列
result = df.apply(lambda x: x.dropna().tolist()).to_dict()
借助apply对所有列统一执行过滤NaN并转列表的操作,最后转为字典,代码更紧凑。
方法3:读取阶段提前处理(可选)
若Excel空白单元格无实际意义,可在读取时关闭NaN识别:
df = pd.read_excel(xlsx_path, na_filter=False)
此方式会将空白单元格转为空字符串,后续需额外过滤空值,适合明确空白无需保留的场景。
内容的提问来源于stack exchange,提问作者pyGisServer
相关产品推荐
相关产品推荐

