关于Pandas:Pandas – Python,根据Date列删除行

Pandas - Python, deleting rows based on Date column

我试图删除基于一个日期列的数据帧行;[Delivery Date]

我需要删除大于6个月但不等于"1970"年的行。

我创建了两个变量:

1
2
3
4
5
from datetime import date, timedelta
sixmonthago = date.today() - timedelta(188)

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

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

有人能提供正确的解决方案吗?


你可以过滤掉它们:

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

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

您可以使用布尔索引和传递多个条件来筛选df,对于多个条件,您需要使用数组运算符,因此|而不是or,并在条件周围加上括号,这是由于运算符的优先级。

检查文档以获取布尔索引的解释


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

1
2
3
4
5
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 )

然后您可以应用以下逻辑。

1
2
3
4
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)]

如果确实要删除数据帧的部分,可以执行以下操作:

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