Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.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 使用Pandas选择月的哪一天作为日期范围的开始_Python_Pandas - Fatal编程技术网

Python 使用Pandas选择月的哪一天作为日期范围的开始

Python 使用Pandas选择月的哪一天作为日期范围的开始,python,pandas,Python,Pandas,我有一个在timeseries上索引的数据集。我想从数据中的行中获取18到13天后的日期的所有数据。例如 df = pd.DataFrame.from_records([ (datetime(2013, 2, 16),2), (datetime(2013, 2, 18),5), # (datetime(2013, 2, 19),6), # (datetime(2013, 3, 1), 7), # (datetime(2013, 3, 17),

我有一个在timeseries上索引的数据集。我想从数据中的行中获取18到13天后的日期的所有数据。例如

df = pd.DataFrame.from_records([
    (datetime(2013, 2, 16),2), 
    (datetime(2013, 2, 18),5),  # 
    (datetime(2013, 2, 19),6),  # 
    (datetime(2013, 3, 1), 7),  # 
    (datetime(2013, 3, 17),1), 
    (datetime(2013, 3, 20),3),  #
    (datetime(2013, 3, 25),4),  #
    (datetime(2013, 4, 1), 8)],
    columns=["time_slot", "data"], 
    index=["time_slot"])
只应包括标记为的行

做:

days = df.ix[df.index.day == 18].index
for d in days:
    print df.ix[d:d+timedelta(days=13)]

将只打印前三条标记的记录。有没有一种方法可以在不明确指定月份的情况下,根据月份选择日期范围

我不知道你为什么要这样做,但我更想在熊猫里玩玩约会,所以试一下。我对Pandas很陌生——我发现通过创建一个附加列来使用日期索引是最简单的。毫无疑问,有人可以做得更简洁

我认为以下内容符合您的要求:

from datetime import *
import pandas as pd

from_day = 15
plus_days = 18

df = pd.DataFrame.from_records([
(datetime(2013, 2, 16),2), 
(datetime(2013, 2, 18),5),  # 
(datetime(2013, 2, 19),6),  # 
(datetime(2013, 3, 1), 7),  # 
(datetime(2013, 3, 17),1), 
(datetime(2013, 3, 20),3),  #
(datetime(2013, 3, 25),4),  #
(datetime(2013, 4, 1), 8)],
columns=["time_slot", "data"], 
index=["time_slot"])

df.insert(0,'days',df.index)
df.days = df.days.apply(lambda x: x.day)
然后,您可以使用以下命令查询数据帧:

df[(df['days']>=from_day) & (df['days'] < from_day + plus_days)].data
显然,将from_day设置为15天,再加上第18天,将始终导致从第15天开始的所有天数,但我认为这通常会起作用

使现代化 根据您的要求,将我的起始日和结束日设置为13,以下包括您希望的2013年2月1日至3日:

df.insert(0,'adjusted_day',df.index)
df.adjusted_day = df.adjusted_day.apply(lambda x: (x + timedelta(days=-plus_days)).day) 
df[(df.index.day>=from_day) | ((df.adjusted_day <=from_day) & (df.adjusted_day >=from_day-plus_days))]
怎么样

df[df.index.day>=18]

它没有抓住2月的角落案件。2月18日+13天=>2月2日或3日,取决于闰年。正如陈坤的回答一样,这并不适用于2月。你的解决方案有效,可能比我的更好。最后,我选择了df.ix[df.index.day>=18 | df.index.month==3&df.index.day