Pandas-Python, удаление строк на основе столбца даты

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

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

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

from datetime import date, timedelta
sixmonthago = date.today() - timedelta(188)

import time
nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y')

но я не знаю как удалить строки на основе этих двух переменных, используя

2 ответов


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

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

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

вы можете использовать логическое индексирование и передать несколько условий для фильтрации df, для нескольких условий вам нужно использовать операторы массива so | вместо 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)