Или вы можете попробовать ниже, если вы ищете падение строк между 2008 и 2013 годами, как вы просили в посте "выбрать все строки в период с сентября 2013 года по май 2008 года"
затем используйте pandas.Series.between :
Набор данных заимствован у @jezrael ..
DataFrame для демонстрационных целей:
>>> stats_month_census_2
year month data
0 2008 April 1
1 2008 May 3
2 2008 June 4
3 2013 September 6
4 2013 October 5
5 2014 November 6
6 2014 December 7
Использование pandas.Series.between()
>>> stats_month_census_2[stats_month_census_2['year'].between(2008, 2013, inclusive=True)]
year month data
0 2008 April 1
1 2008 May 3
2 2008 June 4
3 2013 September 6
4 2013 October 5
Если это просто вопрос datetime
формата, вы можете просто попробовать ниже:
>>> stats_month_census_2[stats_month_census_2['year'].between('2008-05', '2013-09', inclusive=True)]
year month data
1 2008-05-01 May 3
2 2008-06-01 June 4
3 2013-09-01 September 6
Использование DataFame.query:
>>> stats_month_census_2.query('"2008-05" <= year <= "2013-09"')
year month data
1 2008-05-01 May 3
2 2008-06-01 June 4
3 2013-09-01 September 6
Использование метода isin: Выбор строк между двумя датами
>>> stats_month_census_2[stats_month_census_2['year'].isin(pd.date_range('2008-05-01', '2013-09-01'))]
year month data
1 2008-05-01 May 3
2 2008-06-01 June 4
3 2013-09-01 September 6
Или даже вы можете пройти, как показано ниже ..
>>> stats_month_census_2[stats_month_census_2['year'].isin(pd.date_range('2008-05', '2013-09'))]
year month data
1 2008-05-01 May 3
2 2008-06-01 June 4
3 2013-09-01 September 6
Использование метода loc
путем нарезки на основе дат начала и окончания индекса.
Start = stats_month_census_2[stats_month_census_2['year'] =='2008-05'].index[0]
End = stats_month_census_2[stats_month_census_2['year']=='2013-09'].index[0]
>>> stats_month_census_2.loc[Start:End]
year month data
1 2008-05-01 May 3
2 2008-06-01 June 4
3 2013-09-01 September 6
Примечание: Просто для любопытства, как @jezrael спросил в комментарии, я добавляю, как преобразовать столбец year
в формат даты и времени:
Как показано в приведенном ниже примере DataFrame, где у нас есть два отдельных столбца year
и month
, где столбец year содержит только годы, а столбец month представлен в формате буквенной строки. Итак, сначала нам нужно преобразовать String в форму int присоединитесь или добавьте год и месяц вместе, назначив день 1 для всех, используя метод панд pd.to_datetime
.
df
year month data
0 2008 April 1
1 2008 May 3
2 2008 June 4
3 2013 September 6
4 2013 October 5
5 2014 November 6
6 2014 December 7
Выше приведен необработанный DataFrame до преобразования даты и времени. Итак, я использую нижеприведенный подход, который я выучил за это время непосредственно в SO.
1- Сначала преобразуйте имена month
в форму int и назначьте их для нового столбца с именем Month
, так что мы можем использовать его для преобразования позже.
df['Month'] = pd.to_datetime(df.month, format='%B').dt.month
2- Во-вторых, или, наконец, преобразуйте непосредственно столбец года в правильный формат datetime
, непосредственно назначив самому столбцу year
это своего рода место, которое мы можем сказать.
df['Date'] = pd.to_datetime(df[['year', 'Month']].assign(Day=1))
Теперь столбец Desired DataFrame и year
находится в форме datetime:
print(df)
year month data Month
0 2008-04-01 April 1 4
1 2008-05-01 May 3 5
2 2008-06-01 June 4 6
3 2013-09-01 September 6 9
4 2013-10-01 October 5 10
5 2014-11-01 November 6 11
6 2014-12-01 December 7 12