首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas将原始列的空值替换为df.apply结果

Pandas将原始列的空值替换为df.apply结果
EN

Stack Overflow用户
提问于 2020-05-11 21:27:55
回答 2查看 42关注 0票数 2

我有下面的数据帧df,其中stamp B有时是空的。我必须使用Time列中Stamp A的日期和相应的时间来填充这些空值

代码语言:javascript
复制
              stamp A             stamp B      Time
0 2012-10-08 18:15:05 2012-10-08 18:15:05  19:00:01
1 2012-10-09 12:15:05                 NaT  18:45:09
2 2012-10-11 18:13:00                 NaT  12:20:20
3 2012-10-11 08:15:15 2012-10-11 18:15:05  22:10:05
4 2012-10-12 18:15:20 2012-10-12 17:10:20  19:34:12

这是我的解决方案-

代码语言:javascript
复制
>>>from datetime import dateime as dtm    
>>>result = df[df['stamp B'].isnull()].apply(lambda x: dtm.combine(x['stamp A'].date(), dtm.strptime(x["Time"], "%H:%M:%S").time()), axis=1)

返回result,如下所示:

代码语言:javascript
复制
1   2012-10-09 18:45:09
2   2012-10-11 12:20:20
dtype: datetime64[ns]

但是不确定如何将这个result替换为原始数据帧df['stamp B']中的NaT

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-11 21:31:31

使用Series.dt.floor表示移除时间,使用to_timedelta添加时间增量,然后使用Series.combine_first替换缺少的值

代码语言:javascript
复制
dates = df['stamp A'].dt.floor('d').add(pd.to_timedelta(df['Time']))
df['stamp B'] = df['stamp B'].combine_first(dates)

print (df)
              stamp A             stamp B      Time
0 2012-10-08 18:15:05 2012-10-08 18:15:05  19:00:01
1 2012-10-09 12:15:05 2012-10-09 18:45:09  18:45:09
2 2012-10-11 18:13:00 2012-10-11 12:20:20  12:20:20
3 2012-10-11 08:15:15 2012-10-11 18:15:05  22:10:05
4 2012-10-12 18:15:20 2012-10-12 17:10:20  19:34:12
票数 3
EN

Stack Overflow用户

发布于 2020-05-11 21:29:32

我将从stamp A中提取日期,添加Time,然后在stamp B上执行fillna

代码语言:javascript
复制
s = df['stamp A'].dt.normalized() + pd.to_timedelta(df['Time'])

df['stamp B'] = df['stamp B'].fillna(s)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61730862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档