Pandas - Python,基于Date列删除行

时间:2015-02-20 12:33:56

标签: python date datetime pandas

我试图根据一个日期列删除数据帧的行; [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]列根据这两个变量删除行。

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

2 个答案:

答案 0 :(得分:10)

你可以过滤掉它们:

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

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

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

查看文档以获取boolean indexing

的说明

答案 1 :(得分:2)

确保计算本身在" 6个月"之前。您可能不希望在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)