删除数据框中两个日期之间的行 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
我有下面的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