Pandas中前列为全NaN时,如何左移整列并删除转移列?
解决方案:空列后的列左移并删除原列
需求说明
当表格中某一列的前一列所有值均为NaN时,需将当前列整体左移替换前一列,完成移动后删除原本的当前列。
输入示例
| a | b | c | d | e |
|---|---|---|---|---|
| 1 | 2 | NaN | 4 | 5 |
| 6 | 7 | NaN | 8 | 9 |
| 10 | 11 | NaN | 12 | 13 |
输出示例
| a | b | c | e |
|---|---|---|---|
| 1 | 2 | 4 | 5 |
| 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 |
代码实现(基于Pandas)
import pandas as pd import numpy as np # 构造示例数据(可替换为你的实际数据) df = pd.DataFrame({ 'a': [1, 6, 10], 'b': [2, 7, 11], 'c': [np.nan, np.nan, np.nan], 'd': [4, 8, 12], 'e': [5, 9, 13] }) # 存储需要删除的列 cols_to_drop = [] # 从第2列开始遍历(索引从1起,确保能获取前一列) for idx in range(1, len(df.columns)): prev_col_name = df.columns[idx-1] curr_col_name = df.columns[idx] # 判断前一列是否全为NaN if df[prev_col_name].isna().all(): # 将当前列值覆盖到前一列 df[prev_col_name] = df[curr_col_name] # 标记当前列待删除 cols_to_drop.append(curr_col_name) # 批量删除已完成转移的列 df = df.drop(cols_to_drop, axis=1) print("处理后结果:") print(df)
关键逻辑说明
- 空列判断:使用
isna().all()快速校验整列是否全部为NaN值 - 遍历顺序:从第2列开始遍历,避免因索引越界无法获取前一列
- 延迟删除:先记录所有需要删除的列,最后统一删除,避免遍历过程中列结构变化引发的异常
内容的提问来源于stack exchange,提问作者Md Neyaz
相关产品推荐
相关产品推荐

