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

如何移除pandas DataFrame特定NaN值并合并错位行数据

pandas跨行合并互补非空值实现方案

dropna()的设计逻辑是删除包含空值的整行/整列,无法处理这种两行非空值位置互补、需要合并为单行的场景,以下是两种可直接复用的实现方式:

方法1:单组双行直接合并

如果仅需要处理当前这两行互补数据,直接按列提取非空值重组即可:

import pandas as pd
import numpy as np

# 测试数据复现
df = pd.DataFrame({
    'ID': ['(int, 500)', np.nan],
    'Name': ['Crosby', np.nan],
    'NewID': [np.nan, '(str, 500)'],
    'NewName': [np.nan, 'Sidney']
})

# 方案A:前后填充后去重
result = df.ffill().bfill().drop_duplicates(keep='first')

# 方案B:逐列取首个非空值,逻辑更直观
result = df.apply(lambda col: col.dropna().iloc[0]).to_frame().T

执行后得到的结果和预期的单行结构完全一致。

方法2:批量处理多组互补行

如果数据集是多组“两行互补”的结构,可以先给每组数据打标签,再分组聚合取非空值:

# 每2行划分为一个合并组
df['merge_group'] = np.arange(len(df)) // 2
# 分组后取每组每列的第一个非空值
result = df.groupby('merge_group', as_index=False).first().drop(columns='merge_group')

这个方法可以批量处理多组同类结构的数据,不需要逐行手动处理。

注意:如果某列存在多个非空值,first()会保留组内第一个出现的非空值,如果需要保留最后一个可以替换为last()方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:30:45