Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据日期时间值筛选数据库_Python_Datetime_Pandas_Dataframe - Fatal编程技术网

Python 根据日期时间值筛选数据库

Python 根据日期时间值筛选数据库,python,datetime,pandas,dataframe,Python,Datetime,Pandas,Dataframe,我需要过滤pandas数据帧,以便posted_at(datetime)列值在过去200天内,而owner列值是我给出的特定值。我需要另一个数据帧作为此查询的结果。如何做到这一点 您可以使用日期减时间差: start = pd.to_datetime('2016-11-23 15:00:10') rng = pd.date_range(start, periods=10) df = pd.DataFrame({'posted_at': rng, 'owner': ['a'] * 5 + ['b

我需要过滤pandas数据帧,以便posted_at(datetime)列值在过去200天内,而owner列值是我给出的特定值。我需要另一个数据帧作为此查询的结果。如何做到这一点

您可以使用
日期
时间差

start = pd.to_datetime('2016-11-23 15:00:10')
rng = pd.date_range(start, periods=10)

df = pd.DataFrame({'posted_at': rng, 'owner': ['a'] * 5 + ['b'] * 5})  
print (df)
  owner           posted_at
0     a 2016-11-23 15:00:10
1     a 2016-11-24 15:00:10
2     a 2016-11-25 15:00:10
3     a 2016-11-26 15:00:10
4     a 2016-11-27 15:00:10
5     b 2016-11-28 15:00:10
6     b 2016-11-29 15:00:10
7     b 2016-11-30 15:00:10
8     b 2016-12-01 15:00:10
9     b 2016-12-02 15:00:10
now=pd.datetime.now().date()
打印(现在)
2016-11-29
#实际数据从5变为200
last5=now-pd.Timedelta('5D')
#另一个解决方案
#last5=现在-pd.offset.Day(5)
打印(最后5页)
2016-11-24
掩码=(df.owner='a')&(df.posted_at>last5)和(df.posted_at
大家好,欢迎来到StackOverflow。请花些时间阅读帮助页面,特别是命名和的部分。更重要的是,请阅读。您可能还想了解。谢谢。我只是朝这个方向工作。这正是我想要的。谢谢你接受。小建议——然后不要得到反对票,得到很多好的答案。天气真好!
now = pd.datetime.now().date()
print (now)
2016-11-29

#in real data change 5 to 200
last5 =  now - pd.Timedelta('5D')

#another solution
#last5 =  now - pd.offsets.Day(5)
print (last5)
2016-11-24

mask = (df.owner == 'a') & (df.posted_at > last5) & (df.posted_at < now)
print (mask)
0    False
1     True
2     True
3     True
4     True
5    False
6    False
7    False
8    False
9    False
dtype: bool

print (df[mask])
  owner           posted_at
1     a 2016-11-24 15:00:10
2     a 2016-11-25 15:00:10
3     a 2016-11-26 15:00:10
4     a 2016-11-27 15:00:10