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

使用dropna()处理二维DataFrame后结果为空数组的问题排查

问题分析与解决方案

问题根源

  • DataFrame的dropna()默认参数为how='any',即只要某一行存在任意一个NaN,就会删除整行。如果你的Excel数据中每一行都至少包含一个NaN,执行dropna()后会得到空DataFrame,最终flatten后就是空数组。
  • 而一维Series的dropna()是直接移除单个NaN值,所以能正常清理。

解决方案

根据你的需求选择对应的处理方式:

需求1:提取所有非NaN的单元格值(不管行列)

直接先扁平化数据再清理NaN,或者用stack()将二维结构转为一维后处理:

import pandas as pd
import numpy as np

# 方式1:用stack转一维后删NaN
data = pd.read_excel('/file.xlsx', sheet_name='Sheet1', engine='openpyxl') \
        .astype(float) \
        .stack() \
        .dropna() \
        .values \
        .flatten()

# 方式2:先转numpy数组再过滤NaN
df = pd.read_excel('/file.xlsx', sheet_name='Sheet1', engine='openpyxl').astype(float)
data = df.values.flatten()[~np.isnan(df.values.flatten())]

需求2:保留至少有一个非NaN值的行,再扁平化

调整dropna()的how参数为'all',仅删除全是NaN的行:

data = pd.read_excel('/file.xlsx', sheet_name='Sheet1', engine='openpyxl') \
        .astype(float) \
        .dropna(how='all') \
        .values \
        .flatten()

内容的提问来源于stack exchange,提问作者Leb_Broth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:05:20