You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:45:49