我想获得满足特定要求的数据帧的一部分。
我想这样做:
new_df = old_df[old_df.timevariable.date() == thisdateiwant]
有效的方法吗?
这里的问题是.date()部分。我在使用相同的语法之前完成了这个,但是没有使用old_df的修饰符。例如old_df.timevariable是一个日期时间,那么我可以将它与==datetime
匹配但是因为我想要一个日期,我需要修改数据框中的每个元素,语法并不是这样。
我知道我可以全力以赴,让它循环使用一堆变量,但我很确定这会慢得多。第一个代码片段似乎是执行此操作的最快方式(如WHERE SQL子句),但如果您需要修改您要比较的变量(例如.date()),它似乎无法工作)。
old_df的大小约为(900k,15),所以我希望得到一些有效的东西。目前,我只是更改变量并从SQL重新导入,每个日期(thisdateiwant
)似乎需要5-10秒。我假设在python中使用较大的初始数据库会比这更快。通常,它会为每个日期返回大约30k行到new_df。
这样做的最快方法是什么?
修改
很高兴将此标记为重复,我从其他问题的某些代码(来自@Pault)开始使用它。 基本上做了:
mask = old_db['timevariable'] >= thisdateiwant
mask2 = old_db['timevariable'] < thisdateiwant (+1day)
new_db = old_db.loc[mask]
new_db = new_db.loc[mask2]
我不认为这是同时做两个面具的简单方法,似乎抛出错误。它很好很快,所以我很高兴。
答案 0 :(得分:0)
如果您的列真的是时间戳,那么您可以使用dt
访问者。
new_df = old_df[old_df.timevariable.dt.floor('D') == '2018-05-09']
否则使用pd.to_datetime
old_df[timevariable] = pd.to_datetime(old_df[timevariable])
没有dt访问者,可以更自然地支持日期范围
new_df = old_df[old_df.timevariable >= '2018-05-09'] <- dates after may 9th inclusive