Pandas - Python, deleting rows based on Date column
我试图删除基于一个日期列的数据帧行;
我需要删除大于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') |
但我不知道如何使用
有人能提供正确的解决方案吗?
你可以过滤掉它们:
1 | df[(df['Delivery Date'].dt.year == 1970) | (df['Delivery Date'] >= sixmonthago)] |
这将返回年份为1970或日期小于6个月的所有行。
您可以使用布尔索引和传递多个条件来筛选df,对于多个条件,您需要使用数组运算符,因此
检查文档以获取布尔索引的解释
确保计算本身在"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) |
。