python-3.x - pd.Timestamp.replace 迭代
问题描述
数据
res=pd.DataFrame({'period':['s', 'e', 's', 'e'], 'lapse':[-1.0, 1.0, -1, 1],'date':['1975-02-25 09:39:39.914889', '1976-03-25 09:41:09.103102', '1978-05-25 10:39:58.352073', '1979-09-25 10:40:06.266782']})
我需要迭代地选择lapse==-1
失误并更改hour
和minute
使用以下内容,我可以选择和更改它们,但这也会改变年份。
res['date']=pd.to_datetime(res['date'])
a=res[(res['lapse']==-1.0) & (res['period']=='s')]
a['date']=pd.Timestamp.replace(a.loc[0,'date'], hour=18, minute=15)
那不是我想要的。我正在处理 0ver 20,000 条土地记录,我需要遍历它们。我试过了
import datetime
for index, row in a.iterrows():
print(row['date'])
row['date']=pd.Timestamp.replace(row['date'], hour=17, minute=15)
期望的结果
解决方案
您可以按掩码过滤行date
并仅更改这些值的日期时间:
res['date']=pd.to_datetime(res['date'])
m= (res['lapse']==-1.0) & (res['period']=='s')
res.loc[m, 'date']= res.loc[m, 'date'].apply(lambda x: x.replace(hour=18, minute=15))
#alternative solution
#res.loc[m, 'date']= res.loc[m, 'date'] + pd.offsets.DateOffset(hour=18, minute=15)
print (res)
period lapse date
0 s -1.0 1975-02-25 18:15:39.914888992
1 e 1.0 1976-03-25 09:41:09.103102016
2 s -1.0 1978-05-25 18:15:58.352072992
3 e 1.0 1979-09-25 10:40:06.266782016
推荐阅读
- json - 如何将一个json双列表在线解析成flutter中的dart?
- java - OptionalInt 的意义何在?
- python - 程序在 else 块中给了我无效的语法
- python - 2to3 未将 .sort() 解析为 sorted()
- c++ - 为什么是|| 运营商没有在这里触发?
- javascript - 点直到菜单项中的价格
- google-calendar-api - 列出共享到服务帐户的所有日历
- excel - 从范围返回值的公式在 DAX 度量中不起作用,但在 DAX 列中起作用
- python - Google Scholar 阻止我使用 search_pubs
- python - 如果删除包含另一个对象的对象会发生什么?