Pandas-Python,基于日期列删除行
我试图根据一个日期列删除数据框的行<代码>[交货日期] 我需要删除超过6个月但不等于“1970”年的行 我创建了两个变量:Pandas-Python,基于日期列删除行,python,date,datetime,pandas,Python,Date,Datetime,Pandas,我试图根据一个日期列删除数据框的行[交货日期] 我需要删除超过6个月但不等于“1970”年的行 我创建了两个变量: from datetime import date, timedelta sixmonthago = date.today() - timedelta(188) import time nineteen_seventy = time.strptime('01-01-70', '%d-%m-%y') 但是我不知道如何使用[Delivery Date]列删除基于这两个变量的行 有人
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)]
这将返回年份为1970或日期小于6个月的所有行
您可以使用布尔索引并传递多个条件来过滤df,对于多个条件,您需要使用数组运算符,因此|
而不是或
,并且由于运算符优先级,需要在条件周围加上括号
检查文档以了解有关的解释,确保计算本身在之前的“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)
df=df[(df[‘交付日期’].dt.year!=十九(七十)年)|(df[‘交付日期’]<六(六)个月)]。下降(df.columns)
谢谢。。我得到一个返回错误:TypeError:“只能使用带有datetimelike值的.dt访问器”-可能需要单独的问题,但这是否意味着我必须将[Delivery Date]更改为datetime?对不起,我对这个很陌生。你可能有字符串而不是日期时间,你可以将doingdf['Delivery Date']=pd.转换为_datetime(df['Delivery Date'])
嘿,这是返回的错误:drop()至少接受2个参数,给定1个参数