Pandas - Python,删除基于日期列的行

Pandas - Python, deleting rows based on Date column

我正在尝试根据一个日期列删除数据框的行; [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')

但我不知道如何使用 [Delivery Date] 列删除基于这两个变量的行。

谁能提供正确的解决方案?

您可以将它们过滤掉:

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

这 returns 所有年份为 1970 年或日期小于 6 个月的行。

您可以使用布尔索引并传递多个条件来过滤 df,对于多个条件,您需要使用数组运算符,因此 | 而不是 or,并且由于条件括号运算符优先级。

查看文档以获取 boolean indexing

的解释

确保计算本身在“6 个月”之前是准确的。您可能不想在 188 天内进行硬编码。并非所有的月份都是平等的。

from datetime import date
from dateutil.relativedelta import relativedelta

#
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)