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

