如何获取符合特定条件的Dataframe部分?

时间:2018-06-05 13:10:46

标签: python pandas

我想获得满足特定要求的数据帧的一部分。

我想这样做:

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]

我不认为这是同时做两个面具的简单方法,似乎抛出错误。它很好很快,所以我很高兴。

1 个答案:

答案 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