Задать вопрос
@san_m_m

Как отфильтровать даты в pandas по нескольким ключам?

Добрый день!

Есть таблица.

import requests
from bs4 import BeautifulSoup 
import pandas as pd
import re
import datetime
from datetime import datetime, timedelta

date_cleaning = '15.03.2020'
date_cleaning = datetime.strptime(date_cleaning, '%d.%m.%Y')

url_murmansk = 'https://mintrans.gov-murman.ru/activities/taxi/reestr_taxi/'
r_murmansk = requests.get(url_murmansk)
soup_murmansk = BeautifulSoup(r_murmansk.text, 'html.parser')
data_murmansk = soup_murmansk.find_all(class_ = 'file')
a_murmansk = str(data_murmansk).split('href="/')
a_1_murmansk = str(a_murmansk[1]).split('">\n<span')
a_2_murmansk = ''.join(a_1_murmansk[0].split('amp;'))
a_3_murmansk = 'https://mintrans.gov-murman.ru/' + a_2_murmansk
df_murmansk = pd.read_excel(a_3_murmansk, skiprows = 3)


df_murmansk['Unnamed: 10'] = pd.to_datetime(df_murmansk['Unnamed: 10'], dayfirst = True)
df_murmansk = df_murmansk.loc[(df_murmansk['Unnamed: 10'] > date_cleaning)]

df_murmansk


Мне нужно чтобы в таблицы остались только строчки с датами двух промежутков:
1) с 15 марта 2020 года по 31 декабря 2020 года.
2) с сегодняшнего дня и дальше.

В вышеприведенном коде я отфильтровал по 15 марта, как оптимально оптимизировать данный код для двух временных промежутков?
  • Вопрос задан
  • 322 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@zexer
import pandas as pd

dates = pd.date_range(start='2020-01-01', periods=500)

df = pd.DataFrame({'Timestamp': dates, 'Value': range(len(dates))})

df = df[((df['Timestamp'] >= '2020-03-15') & (df['Timestamp'] <= '2020-12-31')) | (df['Timestamp'] >= '2021-02-03')]

Если "сегодняшняя дата" будет регулярно меняться, то используйте pd.Timestamp.now() вместо '2021-02-03'
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Tomio
@Tomio
backend developer (python, php)
Возможно, так:
from datetime import date
date_cleaning = date(2020, 3, 15)
date_cleaning_end = date(2020, 12, 31)

df_murmansk = df_murmansk[
    ((df_murmansk['Unnamed: 10'] > date_cleaning) & (df_murmansk['Unnamed: 10'] < date_cleaning_end)) |
    (df_murmansk['Unnamed: 10'] > date.today())
]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы