Python 熊猫:从另一列填充混合日期时间字段

Python 熊猫:从另一列填充混合日期时间字段,python,pandas,datetime,Python,Pandas,Datetime,我有一个datetime列,其中偶尔缺少日期信息。它只包含小时信息 Entry Init Edit 14 1666832 10.10.2002 02:10 10.10.2002 02:10 15 1675384 13.10.2002 13:49 13.10.2002 13:49 16 1709573 25.10.2002 14:21 14:23 17 1740242

我有一个datetime列,其中偶尔缺少日期信息。它只包含小时信息

        Entry   Init                Edit
    14  1666832 10.10.2002 02:10    10.10.2002 02:10
    15  1675384 13.10.2002 13:49    13.10.2002 13:49
    16  1709573 25.10.2002 14:21    14:23           
    17  1740242 03.11.2002 21:08    03.11.2002 21:08
    18  1751053 05.11.2002 10:46    05.11.2002 10:46
如果“编辑”仅显示小时信息,我想将日期信息添加到“编辑”列中,其中包含“初始化”字段中的日期。我编写了一个函数并将其应用于相关字段

def edit(x,y):
    if len(y) < 16:
        y = f"{x.split(' ')[0]} {y}"
    return y

df["EditDate_proper"] = df.apply(lambda x: edit(x['Init'], x['Edit']), axis=1)
def编辑(x,y):
如果len(y)<16:
y=f“{x.split(“”)[0]}{y}”
返回y
df[“EditDate_property”]=df.apply(lambda x:edit(x['Init'],x['edit']),axis=1)
它工作正常,但我想知道是否有一种更聪明的方法来填充格式错误的值,类似于“fillna”方法。例如,“如果此字段不包含%d.%m.%Y%H:%m种格式,请从此字段的%d.%m.%Y信息中获取”

提前谢谢

我想知道是否有一种更聪明的方法来填充格式错误的值,类似于“fillna”方法

可以通过和将值转换为日期时间和时间增量 使用
errors='concurve'
因此,如果没有匹配项,则获取缺少的值,通过删除时间,添加到时间增量,最后用转换为日期时间的原始值替换缺少的值:

df['Init'] = pd.to_datetime(df['Init'], errors='coerce')
timedeltas = pd.to_timedelta(df['Edit'] + ':00', errors='coerce')
edit_dates = pd.to_datetime(df['Edit'], errors='coerce')

df["EditDate_proper"]  = (timedeltas + df['Init'].dt.floor('d')).fillna(edit_dates)
print (df)
      Entry                Init              Edit     EditDate_proper
14  1666832 2002-10-10 02:10:00  10.10.2002 02:10 2002-10-10 02:10:00
15  1675384 2002-10-13 13:49:00  13.10.2002 13:49 2002-10-13 13:49:00
16  1709573 2002-10-25 14:21:00             14:23 2002-10-25 14:23:00
17  1740242 2002-03-11 21:08:00  03.11.2002 21:08 2002-03-11 21:08:00
18  1751053 2002-05-11 10:46:00  05.11.2002 10:46 2002-05-11 10:46:00
如果要使用字符串:

m = df['Edit'].str.len() < 16
df["EditDate_proper"] = df['Init'].mask(m, df['Init'].str.split().str[0] + ' ' + df['Edit'])
print (df)
      Entry              Init              Edit   EditDate_proper
14  1666832  10.10.2002 02:10  10.10.2002 02:10  10.10.2002 02:10
15  1675384  13.10.2002 13:49  13.10.2002 13:49  13.10.2002 13:49
16  1709573  25.10.2002 14:21             14:23  25.10.2002 14:23
17  1740242  03.11.2002 21:08  03.11.2002 21:08  03.11.2002 21:08
18  1751053  05.11.2002 10:46  05.11.2002 10:46  05.11.2002 10:46
m=df['Edit'].str.len()<16
df[“EditDate_property”]=df['Init'].mask(m,df['Init'].str.split().str[0]+''+df['Edit']))
打印(df)
条目初始编辑编辑日期\u正确
14  1666832  10.10.2002 02:10  10.10.2002 02:10  10.10.2002 02:10
15  1675384  13.10.2002 13:49  13.10.2002 13:49  13.10.2002 13:49
16  1709573  25.10.2002 14:21             14:23  25.10.2002 14:23
17  1740242  03.11.2002 21:08  03.11.2002 21:08  03.11.2002 21:08
18  1751053  05.11.2002 10:46  05.11.2002 10:46  05.11.2002 10:46

我的第一次尝试实际上是使用errors='concurve'参数将其转换为datetime对象。然后我意识到我不能像处理字符串版本那样处理“NaT”值。你提出的两种方法似乎都很有效,非常感谢。