在Pandas的流动数据框架中,我想提取'03/01'
和'06/01'
之间相应日期的列。我根本不想使用索引,因为我的输入将是开始日期和结束日期。我怎么能这样做?
A B
0 01/01 56
1 02/01 54
2 03/01 66
3 04/01 77
4 05/01 66
5 06/01 72
6 07/01 132
7 08/01 127
答案 0 :(得分:2)
首先使用daterange创建所需日期列表。我正在添加2000年,因为你需要提供一年的工作,我然后切断它以获得所需的字符串。在现实生活中,由于像闰日这样的事情,你可能需要关注实际年份。
date_start = '03/01'
date_end = '06/01'
dates = [x.strftime('%m/%d') for x in pd.date_range('2000/{}'.format(date_start),
'2000/{}'.format(date_end), freq='D')]
日期现在等于:
['03/01',
'03/02',
'03/03',
'03/04',
.....
'05/29',
'05/30',
'05/31',
'06/01']
然后只需使用isin参数即可完成
df = df.loc[df.A.isin(dates)]
df
如果您的列是日期时间列,我猜您可以跳过列表推导中的strftime部分以获得正确的结果。
答案 1 :(得分:1)
欢迎使用布尔掩码,即:
df[(df.A >= start_date) && (df.A <= end_date)]
括号内是True
和False
的布尔数组。只返回满足您给定条件的行(计算结果为True
)。这是一个很好的工具,它可以很好地适应熊猫和numpy。