如何在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()
原理说明:
stack():将所有非空值转为行索引+列索引的层级结构,自动过滤NaNgroupby(level=0):按原行索引分组reset_index(drop=True):每组内重新生成连续索引,实现左移对齐unstack():将层级结构还原为原列格式,空缺位置补NaN
内容的提问来源于stack exchange,提问作者Alan Paul
相关产品推荐
相关产品推荐

