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

Python pandas如何仅对指定列实现空值后移非空值左对齐

实现方法

你原有代码的问题是直接对整个DataFrame执行移位逻辑,没有划定处理范围。不需要修改核心的shift_null移位函数,只要拆分列段单独处理目标范围、再拼接保留列即可,具体实现逻辑如下:

  • 先把DataFrame拆成两部分:需要执行空值左移的A-E列,以及需要保持原样的F-J列
  • 仅对A-E列逐行执行空值左移逻辑,非空值靠左、空值填充到右侧
  • 将处理完成的A-E列与未做任何修改的F-J列按列拼接,得到最终结果

完整代码

import numpy as np
import pandas as pd

# 原有空值移位函数无需修改
def shift_null(arr):
    return [x for x in arr if x == x] + [np.nan for x in arr if x != x]

# 定义处理范围和保留范围
target_columns = ["A", "B", "C", "D", "E"]
keep_columns = ["F", "G", "H", "I", "J"]

# 仅对目标列执行逐行空值左移
processed_part = df[target_columns].apply(shift_null, axis=1, result_type="expand")
processed_part.columns = target_columns

# 拼接处理后的列和原封不动的保留列
df = pd.concat([processed_part, df[keep_columns]], axis=1)

代码说明:将apply的axis参数设为1代表逐行传入数据执行移位,效果和你之前转置后逐列处理完全一致;F-J列全程不参与移位运算,数据和原表完全一致,执行结果和你给出的期望输出完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:00:17