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

如何用Pandas在日期列非空时复制行并清空原行日期?

解决方法

针对单日期列(Date1)的处理

先修改原行,把有Date1值的列清空,再复制对应行合并到结果中:

import pandas as pd

# 复制原数据作为待修改的原行集合
employeeDF_modified = employeeDF.copy()
# 筛选Date1非空的行,将这些行的Date1设为空(根据你的空值格式选pd.NA或'')
mask = employeeDF['Date1'].notna() & (employeeDF['Date1'] != '')
employeeDF_modified.loc[mask, 'Date1'] = pd.NA

# 提取需要复制的行(如果需要复制行仅保留Date1,可清空其他日期列)
employeeDF_try = employeeDF[mask].copy()
# 可选:清空复制行的其他日期列(比如Date2、Date3)
employeeDF_try[['Date2', 'Date3']] = pd.NA

# 合并修改后的原行和复制行,生成最终结果
employeeDF_final = pd.concat([employeeDF_modified, employeeDF_try], ignore_index=True)

一次性处理所有三列日期(Date1/Date2/Date3)

如果要批量处理所有日期列,用循环避免重复代码:

import pandas as pd

# 初始化最终结果为原数据副本
employeeDF_final = employeeDF.copy()
# 定义所有日期列的列表
date_cols = ['Date1', 'Date2', 'Date3']

for col in date_cols:
    # 找出当前列有值的行
    has_date = employeeDF[col].notna() & (employeeDF[col] != '')
    if not has_date.any():
        continue  # 该列无有效日期,跳过
    
    # 1. 清空原行中的当前日期列
    employeeDF_final.loc[has_date, col] = pd.NA
    
    # 2. 复制目标行,仅保留当前列的日期,清空其他日期列
    copied_rows = employeeDF[has_date].copy()
    for other_col in date_cols:
        if other_col != col:
            copied_rows[other_col] = pd.NA
    
    # 3. 将复制行合并到最终结果
    employeeDF_final = pd.concat([employeeDF_final, copied_rows], ignore_index=True)

注意事项

  • 如果CSV中空值用空字符串''表示,把代码里的pd.NA替换成''即可
  • 用pd.concat替代已弃用的append方法,兼容性更好
  • 若复制行不需要清空其他日期列,删掉对应清空代码即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 22:27:31