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

如何在Python DataFrame中逐列去除尾部NaN值?

解决方案:将每一列非NaN值移至尾部以去除尾部NaN

要实现你需要的效果(将每一列的非NaN值移动到列的尾部,覆盖原有尾部的NaN,前面位置保留NaN),可以通过自定义函数结合apply方法处理每一列:

代码实现

import pandas as pd
import numpy as np

def move_non_nan_to_end(column):
    # 提取列中的非NaN值
    non_nan_values = column.dropna().values
    # 计算需要填充的NaN数量
    num_nans = len(column) - len(non_nan_values)
    # 拼接NaN和非NaN值,生成新列
    return pd.Series(
        np.concatenate([np.full(num_nans, np.nan), non_nan_values]),
        index=column.index
    )

# 假设你的DataFrame名为df
df_processed = df.apply(move_non_nan_to_end, axis=0)

原理说明

  1. 对每一列单独处理:先提取该列所有非缺失值(非NaN)
  2. 计算该列需要补充的NaN数量(总行数减去非缺失值数量)
  3. 将NaN填充在列的前部,非缺失值放在列的后部,覆盖原有的尾部NaN
  4. 通过apply方法将这个逻辑应用到DataFrame的每一列

处理后,每一列的尾部将不再有NaN,非NaN值会从列的某一位置开始连续到末尾,与你提供的示例输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:22:01