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

如何在Pandas中移除NaN单元格且不删除整行(Python)

解决方案

要实现将每行非空值左移、填补前置NaN的需求,可采用以下两种高效方法:

方法1:逐行处理(直观易懂)

通过apply遍历每行,提取非空值后重新对齐到原列位置:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({
    'Word':['Text1', np.nan, np.nan, 'Text1', 'Text1'],
    'Word2':['Text2', 'Text1', np.nan, 'Text2', np.nan],
    'Word3':['Text3', 'Text2', 'Text1', 'Text3', np.nan]
})

# 核心处理逻辑
df_fixed = df.apply(
    lambda row: pd.Series(row.dropna().values, index=df.columns[:len(row.dropna())]),
    axis=1
)

print(df_fixed)

输出结果:

Word  Word2  Word3
0  Text1  Text2  Text3
1  Text1  Text2    NaN
2  Text1    NaN    NaN
3  Text1  Text2  Text3
4  Text1    NaN    NaN

方法2:堆叠拆分法(大数据量更高效)

利用stack和unstack操作避免逐行循环,适合处理大规模数据:

df_fixed = df.stack().groupby(level=0).apply(lambda x: x.reset_index(drop=True)).unstack()

原理说明:

  1. stack():将所有非空值转为行索引+列索引的层级结构,自动过滤NaN
  2. groupby(level=0):按原行索引分组
  3. reset_index(drop=True):每组内重新生成连续索引,实现左移对齐
  4. unstack():将层级结构还原为原列格式,空缺位置补NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:05:30