dataframe 的 apply, lambda,加自定函数报错。

2020-08-30 03:34:05 +08:00
 yellowtail
def fuc_time(x,a):
if ((x - x.replace( hour=0,minute=0,second=0 )-datetime.timedelta(minutes =1))%datetime.timedelta(minutes =a)) == datetime.timedelta(minutes =0):
return True
else:
return False

df.groupby(df['trade_date'].apply(lambda x:x.replace( hour=0,minute=0,second=0 ))).apply(lambda x:fuc_time(x,5))

报错 replace() got an unexpected keyword argument 'hour'


提问题然后去睡觉了。。。
1399 次点击
所在节点    Python
3 条回复
widewing
2020-08-30 03:54:31 +08:00
df['trade_date']类型不是日期咯
volvo007
2020-08-30 11:07:46 +08:00
看起来是想按“天”来分类

对于时间戳,Series 自己的 .dt 系列方法就可以。比如 df[column].dt.date 或者 df[column].dt.floor('d') (这个 floor 类似 “向下取整”,同理还有 .dt.ceil 和 .dt.round 方法),不需要转为 hour=0, minute=0, second=0 这么麻烦

转换失败的话应该是同 1L 的情况
yellowtail
2020-08-30 22:45:08 +08:00
@widewing df['trade_date']类型是日期,错误在第二个 lambda 里的 x 的对象是 df 类型 需要再加一个 apply 实现对 df 里头的列再次 lambda... 然后得到一个 series 再把 series 插入就可以了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702525

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX