Pandas – Python, удаляя строки по столбцу Date

Я пытаюсь удалить строки фрейма данных на основе одного столбца даты; [Delivery Date]

Мне нужно удалить строки, возраст которых старше 6 месяцев, но не равный 1970 году.

Я создал две переменные:

 from datetime import date, timedelta sixmonthago = date.today() - timedelta(188) import time nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 

но я не знаю, как удалить строки на основе этих двух переменных, используя столбец [Delivery Date] .

Может ли кто-нибудь предоставить правильное решение?

Вы можете просто отфильтровать их:

 df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)] 

Это возвращает все строки, где год составляет 1970 год, или дата составляет менее 6 месяцев.

Вы можете использовать логическое индексирование и передать несколько условий для фильтрации df, для нескольких условий вам нужно использовать операторы массива так | вместо or , и скобки вокруг условий из-за приоритета оператора.

Проверьте документы для объяснения логической индексации

Убедитесь, что сам расчет является точным для «6 месяцев». Возможно, вы не захотите быть hardcoding через 188 дней. Не все месяцы сделаны одинаково.

 from datetime import date from dateutil.relativedelta import relativedelta #http://stackoverflow.com/questions/546321/how-do-i-calculate-the-date-six-months-from-the-current-date-using-the-datetime six_months = date.today() - relativedelta( months = +6 ) 

Затем вы можете применить следующую логику.

 import time nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') df = df[(df['Delivery Date'].dt.year == nineteen_seventy.tm_year) | (df['Delivery Date'] >= six_months)] 

Если вы действительно хотите удалить разделы фрейма данных, вы можете сделать следующее:

 df = df[(df['Delivery Date'].dt.year != nineteen_seventy.tm_year) | (df['Delivery Date'] < six_months)].drop(df.columns)