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