如何在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)
原理说明
- 对每一列单独处理:先提取该列所有非缺失值(非NaN)
- 计算该列需要补充的NaN数量(总行数减去非缺失值数量)
- 将NaN填充在列的前部,非缺失值放在列的后部,覆盖原有的尾部NaN
- 通过
apply方法将这个逻辑应用到DataFrame的每一列
处理后,每一列的尾部将不再有NaN,非NaN值会从列的某一位置开始连续到末尾,与你提供的示例输出完全匹配。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

