用下一列中的日期值替换Pandas中的日期字段

2024-09-28 03:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由多个日期字段组成的数据框架,如下所示

df = pd.DataFrame({
    'Date1': ['2017-12-14', '2017-12-14', '2017-12-14', '2017-12-15', '2017-12-14', '2017-12-14', '2017-12-14'],
    'Date2': ['2018-1-17', "NaT","NaT","NaT","NaT","NaT","NaT"],
    'Date3': ['2018-2-15',"NaT","NaT",'2018-4-1','NaT','NaT','2018-4-1'],
    'Date4': ['2018-3-11','2018-4-1','2018-4-1',"NaT",'2018-4-1','2018-4-2',"NaT"]})
df


Date1       Date2       Date3       Date4
2017-12-14  2018-1-17   2018-2-15   2018-3-11
2017-12-14  NaT         NaT         2018-4-1
2017-12-14  NaT         NaT         2018-4-1
2017-12-15  NaT         2018-4-1    NaT
2017-12-14  NaT         NaT         2018-4-1
2017-12-14  NaT         NaT         2018-4-2
2017-12-14  NaT         2018-4-1    NaT
^{tb1}$

正如您所看到的,有很多空的日期值,我需要用下一列中的日期填充这些值

预期产出:

^{tb2}$

请注意:最后一列可以保留为NaT

我尝试了一种失败的方法:

df.bfill(axis=1)

Tags: 数据方法框架dataframedfnatpdaxis
1条回答
网友
1楼 · 发布于 2024-09-28 03:22:08

如有必要,将值转换为日期时间,然后重新填充缺少的值NaT

df = df.apply(pd.to_datetime).bfill(axis=1)
print (df)
       Date1      Date2      Date3      Date4
0 2017-12-14 2018-01-17 2018-02-15 2018-03-11
1 2017-12-14 2018-04-01 2018-04-01 2018-04-01
2 2017-12-14 2018-04-01 2018-04-01 2018-04-01
3 2017-12-15 2018-04-01 2018-04-01        NaT
4 2017-12-14 2018-04-01 2018-04-01 2018-04-01
5 2017-12-14 2018-04-02 2018-04-02 2018-04-02
6 2017-12-14 2018-04-01 2018-04-01        NaT

如果有多个列,则需要按列表指定它们:

cols = ['Date1', 'Date2', 'Date3', 'Date4']
#or columns names with Date text
#cols = df.filter(like='Date').columns
df[cols] = df[cols].apply(pd.to_datetime).bfill(axis=1)

相关问题 更多 >

    热门问题