如何移除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
相关产品推荐
相关产品推荐

