在pandas Dataframe中切片列的特定行

时间:2017-07-11 07:41:52

标签: python-3.x pandas dataframe slice

在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

2 个答案:

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

括号内是TrueFalse的布尔数组。只返回满足您给定条件的行(计算结果为True)。这是一个很好的工具,它可以很好地适应熊猫和numpy。