删除数据框中两个日期之间的行 Pandas

Drop rows in dataframe that are between two dates Pandas

我有下面的table:

import pandas as pd

raw_data = {
    'vendor_id': [1, 2, 3, 4, 5, 6], 
    'name': ['vendor_schmendor', 'parts_r_us', 'vendor_king', 'vendor_diagram', 'venny', 'vendtriloquist'], 
    'contract_sign_date': ['2018-09-01', '2018-09-03', '2018-10-11', '2018-08-21', '2018-08-13', '2018-10-29'],
    'total_spend' :[34324, 23455, 77654, 23334, 94843, 23444]}

df = pd.DataFrame(raw_data, columns = ['vendor_id', 'name', 'contract_sign_date', 'total_spend'])

我接到了一项任务,我必须删除 contract_sign_date 在“2018-09-01”和“2018-10-13”之间的所有行,这是我的解决方案(尽管它不起作用):

alter = df.drop((df['contract_sign_date'] == "2018-09-01") & (df['contract_sign_date'] == "2018-10-13"))

输出抛出:KeyError: '[False, False, False, False, False, False] not found in axis'

所以任何人都可以提供代码以便我可以构建我想要的东西吗?

你的条件是检查两个不同值的同时相等性(a == b) and (a==c),这是不可能的。

使用 between 和布尔 NOT 运算符 ~:

alter = df[~df['contract_sign_date'].between("2018-09-01", "2018-10-13")]

输出:

   vendor_id            name contract_sign_date  total_spend
3          4  vendor_diagram         2018-08-21        23334
4          5           venny         2018-08-13        94843
5          6  vendtriloquist         2018-10-29        23444

注意。我们在这里使用字符串,因为 YYYY-MM-DD 格式可以直接比较,如果使用不同的格式,您需要使用日期时间类型

如果你想使用drop,你可以试试

m = (df['contract_sign_date'] < "2018-09-01") & (df['contract_sign_date'] >= "2018-08-13")
# or
m = df['contract_sign_date'].between("2018-08-13", "2018-09-01", inclusive="left")

out = df.drop(m[~m].index)
print(out)

   vendor_id            name contract_sign_date  total_spend
3          4  vendor_diagram         2018-08-21        23334
4          5           venny         2018-08-13        94843