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

如何按时间合并DataFrame/CSV行,仅填充NaN单元格?

解决方案

先直接上可运行的完整代码,再拆解关键步骤:

import pandas as pd

try:
    # 读取CSV时将"--"转为缺失值,同时筛选目标列
    csv = pd.read_csv(
        csv_path,
        usecols=lambda c: c in {"Time", "Num", "MyCols..."},
        na_values="--"  # 核心:让pandas识别"--"为缺失值
    )
except ValueError:
    print("No Tracking Data")
    return

# 过滤掉有效数据不足2列的行
csv = csv.dropna(thresh=2)

# 按Time分组合并,仅填充缺失单元格
merged_csv = csv.groupby("Time", as_index=False).first()

# 若同一时间的多行分散在不同列有值,可改用这个更稳妥的合并逻辑:
# merged_csv = csv.groupby("Time").apply(lambda x: x.bfill().ffill().iloc[0]).reset_index(drop=True)

关键步骤说明

  • 缺失值标准化:读取CSV时必须加na_values="--",否则pandas会把"--"当成普通字符串,后续的缺失值合并逻辑完全失效。
  • 分组合并逻辑:
    • groupby("Time").first():对每个时间分组的每一列,取第一个非缺失值,自动跳过后续的NaN,完美实现"仅覆盖NaN单元格"的需求。
    • 备选的bfill().ffill():先向后填充(用后面行的有效值补前面的NaN),再向前填充(用前面行的有效值补后面的NaN),最后取第一行,适合同一时间分组内多行分散持有不同列有效值的场景。
  • 性能适配:2万行数据属于pandas的轻量级处理场景,两种合并方法都能秒级完成,无需额外优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:04:04