如何在Pandas DataFrame中仅移除空单元格并将下方值上移?
如何在Pandas DataFrame中仅移除空单元格并将下方值上移?
哈哈,这个问题我之前也碰到过!Pandas确实没有专门用来“删除单个空单元格并让下方值上移”的内置函数,但我们可以通过针对目标列的简单处理来实现你想要的效果,完全不用手动调整行结构~
先看你的需求:你希望保留SMA_5列的所有行不变,同时把Pandas_5列里的空值(nan)去掉,让后面的非空值依次上移填补空缺位置。实现这个需求的核心思路是:提取目标列的非空值,然后按顺序重新填充回原列。
具体实现代码
import pandas as pd # 假设你的DataFrame名字是df # 提取Pandas_5列的非空值,重置索引让它们按顺序排列 shifted_pandas_5 = df['Pandas_5'].dropna().reset_index(drop=True) # 将处理后的序列重新对齐到原DataFrame的行索引,填充回Pandas_5列 df['Pandas_5'] = shifted_pandas_5.reindex(df.index).values
代码解释
df['Pandas_5'].dropna()会把Pandas_5列里的所有空值去掉,只保留非空的数值,比如你的例子里就是[89, 90, 70, 31, ...];reset_index(drop=True)是为了把这些非空值的索引重置为从0开始的连续数字,确保它们的顺序是原列里的先后顺序;shifted_pandas_5.reindex(df.index)会把处理后的序列扩展到原DataFrame的行数,前面的位置用非空值填充,后面如果原列的非空值数量不够,剩下的位置会自动填充nan;- 最后用
.values直接赋值,就能让Pandas_5列的空值位置被后面的非空值依次上移填补,同时SMA_5列的所有行完全保留,和你想要的结果完全一致~
如果你需要对多列做同样的操作,也可以把这段逻辑封装成一个小函数,循环处理每一列就好啦!
备注:内容来源于stack exchange,提问作者ImBatman
相关产品推荐
相关产品推荐

